BeYourCover Clients API

Agency client workspaces, as in the app's client panel.

Operations 3

GET /api/v1/clients List agency clients #
POST /api/v1/clients Create an agency client #
PUT /api/v1/books/{bookId}/client File a book under a client #

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/beyourcover-com:beyourcover-com-clients-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

beyourcover-com-clients-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: BeYourCover Partner Clients API
  version: 1.1.0
  description: 'Enterprise/partner REST API for AI-powered book cover generation: covers from book details or from reference images, variations, edits, replacing a person with a photo, text removal, upscales, audiobook covers, and full print wraps for Amazon KDP with a print-ready PDF. Every endpoint except `GET /api/v1/health` requires a partner API key (`Authorization: Bearer byc_sk_...`). Long-running operations (generation, reference-image generation, variations, edits, replacing a person, text removal, upscales, audiobook covers, print wraps and a wrap''s front-panel re-extension) return `202 Accepted` with a job envelope; poll `GET /api/v1/jobs/{jobId}` or receive a webhook. Re-typesetting a wrap (`POST /api/v1/wraps/{wrapId}/render`) runs no model, so it answers `200` directly. All error responses use a uniform envelope: `{ "error": { "code": string, "message": string } }`.'
servers:
- url: https://beyourcover.com
  description: Production. All paths below are relative to the site origin.
security:
- ApiKeyBearer: []
tags:
- name: Clients
  description: Agency client workspaces, as in the app's client panel.
paths:
  /api/v1/clients:
    get:
      tags:
      - Clients
      operationId: listClients
      summary: List agency clients
      description: 'The workspace''s agency clients, newest first, each with its book count: the same clients as the app''s client panel. Archived ones only with `include_archived=true`. Free. Every member reads them, reviewers included.'
      parameters:
      - name: include_archived
        in: query
        required: false
        schema:
          type: boolean
      responses:
        '200':
          description: The clients.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClientList'
        '400':
          description: '`code` is `invalid_include_archived`.'
          x-error-codes:
          - invalid_include_archived
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          description: Server error. `code` is `fetch_failed` or `internal_error`.
          x-error-codes:
          - fetch_failed
          - internal_error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
    post:
      tags:
      - Clients
      operationId: createClient
      summary: Create an agency client
      description: Creates a client in the workspace, as the app's client panel does. Free. An admin or editor only. The logo is set in the app.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClientCreate'
      responses:
        '201':
          description: The new client.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client'
        '400':
          description: '`code` is one of: `invalid_body`, `invalid_field_type`, `missing_required_fields`, `field_too_long`.'
          x-error-codes:
          - invalid_body
          - invalid_field_type
          - missing_required_fields
          - field_too_long
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          description: Server error. `code` is `client_creation_failed` or `internal_error`.
          x-error-codes:
          - client_creation_failed
          - internal_error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
  /api/v1/books/{bookId}/client:
    put:
      tags:
      - Clients
      operationId: assignBookToClient
      summary: File a book under a client
      description: 'Files a book under an agency client, or back to Unassigned with `clientId: null`. Free. An admin or editor, on any member''s book of the workspace, as in the app.'
      parameters:
      - name: bookId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BookClientAssignment'
      responses:
        '200':
          description: The book's client.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookClientAssigned'
        '400':
          description: '`code` is `invalid_body` or `invalid_client_id`.'
          x-error-codes:
          - invalid_body
          - invalid_client_id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: '`code` is `book_not_found` or `client_not_found`.'
          x-error-codes:
          - book_not_found
          - client_not_found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '409':
          description: '`code` is `client_archived`: the client is archived. Restore it in the app first.'
          x-error-codes:
          - client_archived
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '500':
          description: Server error. `code` is `fetch_failed`, `book_update_failed` or `internal_error`.
          x-error-codes:
          - fetch_failed
          - book_update_failed
          - internal_error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
components:
  responses:
    Forbidden:
      description: 'The API key is valid but its owner has no active enterprise subscription (`forbidden`); or the acting member''s role does not allow the call: a reviewer cannot spend credits or change books (`forbidden_role`), and only the member who created a book may edit it or its covers (`not_book_creator`).'
      x-error-codes:
      - forbidden
      - forbidden_role
      - not_book_creator
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    Unauthorized:
      description: 'Missing/malformed API key, unknown or inactive key, or inactive subscription detected during credit checks. `code`: `unauthorized`.'
      x-error-codes:
      - unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
  schemas:
    ClientList:
      type: object
      required:
      - clients
      properties:
        clients:
          type: array
          items:
            $ref: '#/components/schemas/Client'
    ErrorEnvelope:
      type: object
      required:
      - error
      properties:
        error:
          type: object
          required:
          - code
          - message
          properties:
            code:
              type: string
              description: Machine-readable error code (snake_case).
            message:
              type: string
              description: Human-readable explanation. For 500s this is always a generic message.
            details:
              type: object
              description: Optional machine-readable recovery information. 402 responses carry { balance, required, billing_url }; unknown-path 404s carry absolute URLs for the OpenAPI spec, documentation, API catalog, authentication guide and health probe.
      description: Uniform error envelope used by every non-2xx JSON response.
    Client:
      type: object
      required:
      - clientId
      - name
      - slug
      - archived
      - book_count
      - created_at
      properties:
        clientId:
          type: string
          format: uuid
        name:
          type: string
        slug:
          type: string
          description: Unique in the workspace; used in export filenames.
        notes:
          type:
          - string
          - 'null'
        archived:
          type: boolean
        book_count:
          type: integer
        created_at:
          type: string
          format: date-time
    BookClientAssignment:
      type: object
      required:
      - clientId
      properties:
        clientId:
          type:
          - string
          - 'null'
          format: uuid
          description: A clientId from `GET /api/v1/clients`, or null for Unassigned.
    ClientCreate:
      type: object
      required:
      - name
      properties:
        name:
          type: string
          maxLength: 120
        notes:
          type:
          - string
          - 'null'
          maxLength: 2000
    BookClientAssigned:
      type: object
      required:
      - bookId
      - clientId
      properties:
        bookId:
          type: string
          format: uuid
        clientId:
          type:
          - string
          - 'null'
          format: uuid
  securitySchemes:
    ApiKeyBearer:
      type: http
      scheme: bearer
      bearerFormat: byc_sk_{32 hex chars}
      description: 'Partner API key sent as `Authorization: Bearer byc_sk_...`. The key must match `^byc_sk_[0-9a-f]{32}$`. A malformed, unknown, or inactive key yields `401 unauthorized`; a valid key whose owner has no active enterprise subscription yields `403 forbidden`.'