Cherished Book Me API

The Me API from Cherished Book — 5 operation(s) for me.

GitHub OpenAPI

Operations 8

GET /me/memorials List the memorials you look after #
POST /me/memorials Create a memorial #
GET /me/memorials/{memorial} Get one of your memorials #
PATCH /me/memorials/{memorial} Edit a memorial #
DELETE /me/memorials/{memorial} Delete a memorial #
GET /me/memorials/{memorial}/status Check a memorial's safety-check status #
GET /me/drafts/{onboarding} Check a memorial being created #
POST /me/memorials/{memorial}/media Get a link for uploading a cover photo #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/cherishedbook-com:cherishedbook-com-me-api"
All apis
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.

Get an API 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 Specification

cherishedbook-com-me-api-openapi.yml Raw ↑
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