Cherished Book Me API
The Me API from Cherished Book — 5 operation(s) for me.
The Me API from Cherished Book — 5 operation(s) for me.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/cherishedbook-com:cherishedbook-com-me-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Cherishedbook Com Me API
version: 2.2.0
description: 'Operations tagged Me across 2 of this provider''s published API definitions: public.yaml, cherishedbook-com-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: /api/v1
- url: https://app.cherishedbook.com/api/v1
description: Absolute base stated in https://www.cherishedbook.com/llms.txt (POST https://app.cherishedbook.com/api/v1/auth/device)
security:
- bearerAuth: []
tags:
- name: Me
paths:
/me/memorials:
get:
summary: List the memorials you look after
description: Memorials belonging to the connected account, newest first.
operationId: listMyMemorials
parameters:
- in: query
name: per_page
required: false
schema:
type: integer
minimum: 1
maximum: 100
- in: query
name: page
required: false
schema:
type: integer
minimum: 1
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
required:
- data
properties:
data:
type: array
items:
$ref: '#/components/schemas/PersonalMemorial'
links:
type: object
meta:
type: object
tags:
- Me
post:
summary: Create a memorial
description: 'Create a memorial for someone who has died, or for a pet. Only the name is required — ask for what the person can comfortably tell you rather than insisting on dates.
Supply `obituary` and those words are kept verbatim; leave it out and one is drafted for the family to edit.
Returns `202`, not `201`: the memorial is being prepared and safety-checked. Poll `poll_url` until it reports `ready` or `blocked`. Do not tell anyone their memorial is published before then.'
operationId: createMyMemorial
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- deceased_name
properties:
deceased_name:
type: string
maxLength: 255
pronouns:
type:
- string
- 'null'
enum:
- she
- he
- they
- name
- null
description: 'How the family refers to them: she, he, they, or name (use only their name). Optional. Left out, any writing we do uses their name and they/them, and never guesses from the name.'
title:
type:
- string
- 'null'
maxLength: 255
subtitle:
type:
- string
- 'null'
maxLength: 255
obituary:
type:
- string
- 'null'
maxLength: 10000
birth_date:
type:
- string
- 'null'
format: date
death_date:
type:
- string
- 'null'
format: date
description: Not in the future, and not before birth_date. Same day is fine.
responses:
'202':
description: Accepted — being prepared and safety-checked
content:
application/json:
schema:
type: object
additionalProperties: false
required:
- id
- status
- deceased_name
- slug
- poll_url
- message
properties:
id:
type: integer
status:
type: string
enum:
- generating
deceased_name:
type:
- string
- 'null'
slug:
type: string
poll_url:
type: string
message:
type: string
'409':
description: 'You have reached a limit — either the number of memorials this account may look after at once, or how many may be created in a day.
'
content:
application/json:
schema:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- live_cap_reached
- daily_limit_reached
- monthly_limit_reached
message:
type: string
retry_after:
type:
- integer
- 'null'
'422':
description: Validation error
tags:
- Me
servers:
- url: /api/v1
/me/memorials/{memorial}:
get:
summary: Get one of your memorials
operationId: getMyMemorial
parameters:
- in: path
name: memorial
required: true
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
required:
- data
properties:
data:
$ref: '#/components/schemas/PersonalMemorial'
'404':
description: Not a memorial you look after
tags:
- Me
patch:
summary: Edit a memorial
description: 'Change a memorial''s wording or settings. Personal tokens only.
Send every change you intend to make in ONE request. Changes to wording (name, title, subtitle, obituary, resting-place notes) are safety-checked, and only one such change is accepted per memorial every five minutes — editing field by field will be refused with a `429` and a `Retry-After`. Settings like privacy, template and publication are free and unthrottled.
A request that changes wording returns `202`: the memorial''s moderation status goes back to `pending` until the check finishes.'
operationId: updateMemorial
parameters:
- in: path
name: memorial
required: true
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
deceased_name:
type: string
maxLength: 255
title:
type:
- string
- 'null'
maxLength: 255
subtitle:
type:
- string
- 'null'
maxLength: 255
description:
type:
- string
- 'null'
maxLength: 10000
description: The obituary text.
resting_place_notes:
type:
- string
- 'null'
maxLength: 2000
resting_place_url:
type:
- string
- 'null'
maxLength: 500
description: A Google Maps or what3words link.
privacy:
type: string
enum:
- public
- restricted
- private
- closed
content_scope:
type: string
is_published:
type: boolean
contributions_enabled:
type: boolean
manual_content_approval:
type: boolean
hide_from_search:
type: boolean
template_id:
type: integer
pronouns:
type:
- string
- 'null'
enum:
- she
- he
- they
- name
- null
description: 'How the family refers to them. Not safety-checked: it guides writing from now on and never rewrites words already there.'
birth_date:
type:
- string
- 'null'
format: date
death_date:
type:
- string
- 'null'
format: date
description: Not in the future, and not before birth_date. Same day is fine.
responses:
'200':
description: Updated — nothing needing a safety check changed
content:
application/json:
schema:
$ref: '#/components/schemas/PersonalMemorial'
'202':
description: Updated — wording changed, safety check running
content:
application/json:
schema:
$ref: '#/components/schemas/PersonalMemorial'
'404':
description: Not a memorial you look after
'422':
description: Validation error
'429':
description: 'Another wording change was made in the last five minutes. `Retry-After` gives the seconds to wait; other settings can still be changed meanwhile.
'
content:
application/json:
schema:
type: object
required:
- code
- message
- retry_after
properties:
code:
type: string
message:
type: string
retry_after:
type: integer
tags:
- Me
delete:
summary: Delete a memorial
description: Remove a memorial from view. It is never destroyed immediately — it stays recoverable from the owner's dashboard until `recoverable_until`. Confirm with the person before calling this.
operationId: deleteMemorial
parameters:
- in: path
name: memorial
required: true
schema:
type: integer
responses:
'200':
description: Deleted
content:
application/json:
schema:
type: object
additionalProperties: false
required:
- id
- deleted
- recoverable_until
- message
- quota
properties:
id:
type: integer
deleted:
type: boolean
recoverable_until:
type:
- string
- 'null'
message:
type: string
quota:
type: object
additionalProperties: false
required:
- live_used
- live_cap
- live_remaining
properties:
live_used:
type: integer
live_cap:
type: integer
live_remaining:
type: integer
'404':
description: Not a memorial you look after
tags:
- Me
servers:
- url: /api/v1
/me/memorials/{memorial}/status:
get:
summary: Check a memorial's safety-check status
description: Whether the automated safety review has finished for this memorial, and whether it passed. Poll this after creating or rewording one.
operationId: getMemorialStatus
parameters:
- in: path
name: memorial
required: true
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PersonalMemorial'
'404':
description: Not a memorial you look after
tags:
- Me
servers:
- url: /api/v1
/me/drafts/{onboarding}:
get:
summary: Check a memorial being created
description: Poll a memorial that is still being prepared. `generating` means keep waiting; `ready` means it is live; `blocked` means the safety check refused it and `reason` says why, so you can suggest a rewording.
operationId: getDraftStatus
parameters:
- in: path
name: onboarding
required: true
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/DraftStatus'
'404':
description: Not a draft you created
tags:
- Me
servers:
- url: /api/v1
/me/memorials/{memorial}/media:
post:
summary: Get a link for uploading a cover photo
description: Returns a short-lived signed URL. `PUT` the JPEG to it as multipart form-data in the `file` field. Do not send images as base64 — upload the bytes directly to the returned URL.
operationId: createMemorialUpload
parameters:
- in: path
name: memorial
required: true
schema:
type: integer
responses:
'201':
description: Created
content:
application/json:
schema:
type: object
additionalProperties: false
required:
- upload_url
- expires_at
- method
- field
- accepts
- max_bytes
- message
properties:
upload_url:
type: string
expires_at:
type: string
method:
type: string
field:
type: string
accepts:
type: array
items:
type: string
max_bytes:
type: integer
message:
type: string
'404':
description: Not a memorial you look after
tags:
- Me
servers:
- url: /api/v1
components:
schemas:
PersonalMemorial:
type: object
additionalProperties: false
required:
- id
- slug
- deceased_name
- pronouns
- title
- subtitle
- obituary
- birth_date
- death_date
- privacy
- content_scope
- is_published
- contributions_enabled
- manual_content_approval
- hide_from_search
- template_id
- resting_place_url
- resting_place_notes
- moderation
- is_deleted
- recoverable_until
- url
- created_at
properties:
id:
type: integer
slug:
type: string
deceased_name:
type:
- string
- 'null'
pronouns:
type:
- string
- 'null'
enum:
- she
- he
- they
- name
- null
description: 'How the family refers to them. Null: use their name and they/them, never guess.'
title:
type:
- string
- 'null'
subtitle:
type:
- string
- 'null'
obituary:
type:
- string
- 'null'
birth_date:
type:
- string
- 'null'
format: date
death_date:
type:
- string
- 'null'
format: date
privacy:
type:
- string
- 'null'
enum:
- public
- restricted
- private
- closed
- null
content_scope:
type:
- string
- 'null'
is_published:
type: boolean
contributions_enabled:
type: boolean
manual_content_approval:
type: boolean
hide_from_search:
type: boolean
template_id:
type:
- integer
- 'null'
resting_place_url:
type:
- string
- 'null'
resting_place_notes:
type:
- string
- 'null'
moderation:
type: object
additionalProperties: false
required:
- status
- reason
- checked_at
properties:
status:
type: string
enum:
- pending
- passed
- failed
reason:
type:
- string
- 'null'
description: Why it was refused. Shown to the memorial's owner only.
checked_at:
type:
- string
- 'null'
is_deleted:
type: boolean
recoverable_until:
type:
- string
- 'null'
url:
type:
- string
- 'null'
description: The public page. Null while unpublished or deleted.
created_at:
type:
- string
- 'null'
DraftStatus:
type: object
required:
- status
properties:
status:
type: string
enum:
- generating
- ready
- blocked
id:
type: integer
reason:
type:
- string
- 'null'
message:
type: string
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'API token, sent as `Authorization: Bearer <token>`.
A personal token is obtained through the device flow (`POST /auth/device`), or by hand from Connected apps in account settings. Rate limited to 20 requests/minute.
A business token is created by a Business Admin in Business settings → API tokens, is shown once, and scopes to that organization. Rate limited to 50 requests/minute.
'
x-refined-from:
- public.yaml
- cherishedbook-com-openapi.yml