Auth paths
otp-token ●
Phone number + SMS code → long-lived HS256 JWT (issued per phone number, effectively non-expiring). Store the token in the keychain, not a plaintext file.
credentials: NOONA_TOKEN
Operations
| Op | Kind | Risk | Requires | Description |
|---|---|---|---|---|
| noona.is/search | rest | read-only | Search enterprises by name/query. unverified input{
"type": "object",
"properties": {
"query": {
"type": "string"
}
},
"required": [
"query"
]
} output{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"profile": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
}
},
"companies": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
}
}
}
}
}
} | |
| noona.is/services | rest | read-only | Event types (services) for a company, with price and prepayment requirements. unverified input{
"type": "object",
"properties": {
"companyId": {
"type": "string"
}
},
"required": [
"companyId"
]
} output{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"minutes": {
"type": "integer"
},
"payments": {
"type": "object",
"properties": {
"total_payment": {
"type": "number"
},
"pre_payment_required": {
"type": "boolean"
},
"pre_payment_amount": {
"type": "number"
}
}
}
}
} | |
| noona.is/availability | rest | read-only | Time slots for a company + event type over a date range. unverified input{
"type": "object",
"properties": {
"companyId": {
"type": "string"
},
"eventTypeId": {
"type": "string"
},
"startDate": {
"type": "string",
"format": "date"
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 30,
"default": 7
}
},
"required": [
"companyId",
"eventTypeId"
]
} output{
"type": "object",
"properties": {
"date": {
"type": "string",
"format": "date"
},
"slots": {
"type": "array",
"items": {
"type": "object",
"properties": {
"time": {
"type": "string"
},
"employeeIds": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
} | |
| noona.is/bookings | rest | read-only | Upcoming bookings (events) with service, company, employee, price and status. unverified input{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 20
}
}
} output{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"starts_at": {
"type": "string",
"format": "date-time"
},
"ends_at": {
"type": "string",
"format": "date-time"
},
"confirmed": {
"type": "boolean"
},
"status": {
"type": "string"
},
"event_types": {
"type": "array",
"items": {
"type": "object"
}
},
"company": {
"type": "object"
},
"employee": {
"type": "object"
},
"payments": {
"type": "object"
}
}
} | |
| noona.is/book not idempotent dry-run ok | rest | mutating · confirm | Two-step: create time_slot_reservation, then confirm into an event. Refuses services that require prepayment (avoids accidental charges). Mutating. unverified input{
"type": "object",
"properties": {
"companyId": {
"type": "string"
},
"eventTypeId": {
"type": "string"
},
"startsAt": {
"type": "string",
"format": "date-time"
},
"employeeId": {
"type": "string"
}
},
"required": [
"companyId",
"eventTypeId",
"startsAt"
]
} output{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"starts_at": {
"type": "string",
"format": "date-time"
},
"ends_at": {
"type": "string",
"format": "date-time"
},
"confirmed": {
"type": "boolean"
},
"status": {
"type": "string"
},
"event_types": {
"type": "array",
"items": {
"type": "object"
}
},
"company": {
"type": "object"
},
"employee": {
"type": "object"
},
"payments": {
"type": "object"
}
}
} | |
| noona.is/cancel | rest | mutating · confirm | Cancel an event by id. Mutating. unverified input{
"type": "object",
"properties": {
"eventId": {
"type": "string"
}
},
"required": [
"eventId"
]
} output{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"starts_at": {
"type": "string",
"format": "date-time"
},
"ends_at": {
"type": "string",
"format": "date-time"
},
"confirmed": {
"type": "boolean"
},
"status": {
"type": "string"
},
"event_types": {
"type": "array",
"items": {
"type": "object"
}
},
"company": {
"type": "object"
},
"employee": {
"type": "object"
},
"payments": {
"type": "object"
}
}
} |
Raw artifacts
The manifest is the discovery record — the schema, the docs, and the search index in one file. manifest.json · recipe.ts · README.md