> ## Documentation Index
> Fetch the complete documentation index at: https://docs.musixmatch.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Search musical works by writer

> One writer IPI in, the musical works credited to that party out, 25 to a page.

Credit, not ownership: no shares, no territory, no administrators, no recordings. The ISWC is the row's identity, so take it into the other two musical-work methods for the full picture. No governing registration is required here, so some ISWCs returned will yield nothing there.

A publisher IPI answers with an empty list rather than the catalogue it administers: this method reports writer credit only. An IPI we hold nothing for is likewise an empty list, never a 404.

The first 400 pages (10,000 registrations) of a writer are servable; past that the request is a 400 with `hint_code` `page_unreachable`.



## OpenAPI

````yaml /enterprises/publishing/openapi.json post /ws/1.1/musicalwork.search.post
openapi: 3.1.0
info:
  title: Musixmatch Publishing API
  version: 1.0.0
  description: >-
    Read the publishing side of the Musixmatch catalog: given a recording, who
    administers and owns its musical works; given a musical work, which
    recordings exist of it; given a writer, which works are credited to them.


    Every method answers over HTTP 200. The outcome of the call is
    `message.header.status_code`, and a 4xx carries a prose `hint` beside a
    machine-readable `hint_code`.
servers:
  - url: https://api.musixmatch.com
security:
  - apiKey: []
paths:
  /ws/1.1/musicalwork.search.post:
    post:
      tags:
        - Musical works
      summary: Search musical works by writer
      description: >-
        One writer IPI in, the musical works credited to that party out, 25 to a
        page.


        Credit, not ownership: no shares, no territory, no administrators, no
        recordings. The ISWC is the row's identity, so take it into the other
        two musical-work methods for the full picture. No governing registration
        is required here, so some ISWCs returned will yield nothing there.


        A publisher IPI answers with an empty list rather than the catalogue it
        administers: this method reports writer credit only. An IPI we hold
        nothing for is likewise an empty list, never a 404.


        The first 400 pages (10,000 registrations) of a writer are servable;
        past that the request is a 400 with `hint_code` `page_unreachable`.
      operationId: musicalworkSearchPost
      parameters:
        - $ref: '#/components/parameters/page'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - writer
              properties:
                writer:
                  type: object
                  required:
                    - ipi
                  properties:
                    ipi:
                      type: string
                      description: >-
                        The writer's IPI, up to 11 digits. Zero-padded for you;
                        a placeholder IPI is rejected.
            example:
              writer:
                ipi: '00528181729'
      responses:
        '200':
          description: >-
            One page of the writer's works. `available` counts registrations,
            which runs ahead of the distinct ISWCs a page renders.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriterWorksEnvelope'
              example:
                message:
                  header:
                    status_code: 200
                    execute_time: 0.147
                  body:
                    pagination:
                      available: 312
                      returned_elements: 25
                      current_page: 1
                      page_size: 25
                      total_pages: 13
                    result_list:
                      - iswc: T9214745718
                        title: Rolling in the Deep
                      - iswc: T9053393649
                        title: Someone Like You
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/ServerError'
components:
  parameters:
    page:
      name: page
      in: query
      required: false
      schema:
        type: integer
        minimum: 1
        default: 1
      description: >-
        The 1-based page to return. A page past the end is an empty
        `result_list`, not an error.
  schemas:
    WriterWorksEnvelope:
      type: object
      properties:
        message:
          type: object
          properties:
            header:
              $ref: '#/components/schemas/Header'
            body:
              type: object
              properties:
                pagination:
                  $ref: '#/components/schemas/Pagination'
                result_list:
                  type: array
                  items:
                    type: object
                    properties:
                      iswc:
                        type: string
                      title:
                        type:
                          - string
                          - 'null'
    Header:
      type: object
      properties:
        status_code:
          type: integer
          description: The outcome of the call. The HTTP status is always 200.
        execute_time:
          type: number
          description: Server-side execution time in seconds
    Pagination:
      type: object
      properties:
        available:
          type: integer
          description: How many rows exist in total
        returned_elements:
          type: integer
          description: How many rows this page carries
        current_page:
          type: integer
        page_size:
          type: integer
          description: Fixed at 25. `page_size` is not accepted as a parameter.
        total_pages:
          type: integer
    ErrorResponse:
      type: object
      properties:
        message:
          type: object
          properties:
            header:
              type: object
              properties:
                status_code:
                  type: integer
                execute_time:
                  type: number
                hint:
                  type: string
                  description: What is wrong with the request, in prose
                hint_code:
                  type: string
                  description: >-
                    A stable slug for the same fault. Part of the contract; the
                    prose is not.
                  enum:
                    - invalid_request
                    - unknown_property
                    - too_many_items
                    - invalid_isrc
                    - invalid_iswc
                    - invalid_ipi
                    - page_unreachable
            body:
              type: array
              items: {}
  responses:
    BadRequest:
      description: >-
        The request is not usable. Returned over HTTP 200 with `status_code` 400
        in the header, alongside `hint` and `hint_code`. Any fault fails the
        whole request: there is no per-row invalid state.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Forbidden:
      description: >-
        The API key is not entitled to this method. Returned over HTTP 200 with
        `status_code` 403 in the header.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    ServerError:
      description: >-
        A read failed. Returned over HTTP 200 with `status_code` 500 in the
        header. A failed read is never an empty result.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    apiKey:
      type: apiKey
      name: apikey
      in: query

````