# Validate Artist

Source: https://recoupable.dev/docs/api-reference/content/validate

Check whether an artist has all the required files to run the content creation pipeline. Returns a structured report of each required and recommended file with its status. Required files must be present or the pipeline will fail. Recommended files improve output quality but are not strictly necessary. Provide `artist_account_id` as a query parameter.

## GET /api/content/validate

Full OpenAPI specification: https://recoupable.dev/docs/spec/content.json

## Authentication

This operation requires one of the security alternatives in the specification below. Security scheme definitions are included where present in the published specification.

[Authentication guide](https://recoupable.dev/docs/authentication)

## Operation and referenced schemas

```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "Recoup API - Content",
    "description": "API documentation for the Recoup platform - an AI agent platform for the music industry",
    "license": {
      "name": "MIT"
    },
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://api.recoupable.dev"
    }
  ],
  "paths": {
    "/api/content/validate": {
      "get": {
        "description": "Check whether an artist has all the required files to run the content creation pipeline. Returns a structured report of each required and recommended file with its status. Required files must be present or the pipeline will fail. Recommended files improve output quality but are not strictly necessary. Provide `artist_account_id` as a query parameter.",
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "artist_account_id",
            "in": "query",
            "description": "UUID of the artist account to validate. Use [GET /api/artists](/api-reference/artists/list) to find artist account IDs.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "1873859c-dd37-4e9a-9bac-80d3558527a9"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Validation completed. Check the `ready` field to determine if the artist can run the pipeline.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContentValidateResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request — artist_account_id is required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContentErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — invalid or missing API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContentErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Artist not found — the provided artist_account_id does not match any artist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContentErrorResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ContentValidateResponse": {
        "type": "object",
        "required": [
          "ready",
          "artist_account_id"
        ],
        "description": "Validation report for an artist's content creation readiness.",
        "properties": {
          "ready": {
            "type": "boolean",
            "description": "`true` if the artist has all required files and the pipeline can run. `false` if required files are missing.",
            "example": true
          },
          "artist_account_id": {
            "type": "string",
            "format": "uuid",
            "description": "UUID of the artist account that was validated",
            "example": "1873859c-dd37-4e9a-9bac-80d3558527a9"
          },
          "songs": {
            "type": "integer",
            "description": "Number of songs found in the artist's `songs/` directory",
            "example": 17
          },
          "templates": {
            "type": "array",
            "description": "Available templates that can be used with this artist",
            "items": {
              "type": "string"
            },
            "example": [
              "artist-caption-bedroom",
              "artist-caption-outside",
              "artist-caption-stage"
            ]
          },
          "checks": {
            "type": "object",
            "description": "Per-file validation results. Only present when `ready` is `true`.",
            "properties": {
              "face_guide": {
                "$ref": "#/components/schemas/ContentValidationCheck"
              },
              "artist_context": {
                "$ref": "#/components/schemas/ContentValidationCheck"
              },
              "audience_context": {
                "$ref": "#/components/schemas/ContentValidationCheck"
              },
              "songs": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ContentValidationCheck"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "count": {
                        "type": "integer",
                        "description": "Number of songs found",
                        "example": 17
                      }
                    }
                  }
                ]
              }
            }
          },
          "missing": {
            "type": "array",
            "description": "List of missing files with severity and fix instructions. Only present when `ready` is `false`.",
            "items": {
              "$ref": "#/components/schemas/ContentMissingFile"
            }
          }
        }
      },
      "ContentErrorResponse": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "string",
            "description": "Error message describing what went wrong",
            "example": "Unauthorized"
          }
        }
      },
      "ContentValidationCheck": {
        "type": "object",
        "required": [
          "status"
        ],
        "description": "Status of a single validation check.",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "ok",
              "missing",
              "warning"
            ],
            "description": "Whether the file was found",
            "example": "ok"
          }
        }
      },
      "ContentMissingFile": {
        "type": "object",
        "required": [
          "file",
          "severity",
          "description",
          "fix"
        ],
        "description": "A missing file that prevents or degrades content creation.",
        "properties": {
          "file": {
            "type": "string",
            "description": "Relative path of the missing file within the artist directory",
            "example": "context/images/face-guide.png"
          },
          "severity": {
            "type": "string",
            "enum": [
              "required",
              "recommended"
            ],
            "description": "`required` means the pipeline will fail without this file. `recommended` means the pipeline will run but output quality is degraded.",
            "example": "required"
          },
          "description": {
            "type": "string",
            "description": "What this file is used for in the pipeline",
            "example": "Face guide image used for AI image generation"
          },
          "fix": {
            "type": "string",
            "description": "Actionable instructions for creating or adding the missing file",
            "example": "Generate a face guide using fal-ai/nano-banana-pro/edit with 2-3 reference photos of the artist"
          }
        }
      }
    },
    "securitySchemes": {
      "apiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "x-api-key",
        "description": "Your Recoup API key. [Learn more](/quickstart#api-keys)."
      },
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer"
      }
    }
  }
}
```
