openapi: 3.0.3 info: title: Kits AI Stem Splitter API version: v1 description: 'The Kits AI API (operated by Arpeggi Labs) provides studio-quality AI music and audio tools as asynchronous inference jobs: voice conversion, vocal separation, stem splitting, and voice-model blending, plus a catalog of royalty-free artist voice models. All create endpoints enqueue a job and return its status; poll the corresponding fetch endpoint for the signed output file URLs. This specification was generated by API Evangelist from the published Kits AI documentation (https://docs.kits.ai/); the provider lists an openapi.json in its llms.txt but the file was not retrievable at generation time.' contact: name: Kits AI Support url: https://help.kits.ai/ x-generated-by: api-evangelist-enrichment x-source: https://docs.kits.ai/api-reference servers: - url: https://arpeggi.io/api/kits/v1 description: Production security: - bearerAuth: [] tags: - name: Stem Splitter description: Split an audio track into vocal and instrument stems. paths: /stem-splits: post: tags: - Stem Splitter operationId: createStemSplit summary: Create a new stem splitter job description: Creates a stem splitter job and adds it to the splitter queue. All requests must be made as multipart form requests. requestBody: required: true content: multipart/form-data: schema: type: object required: - inputFile properties: inputFile: type: string format: binary description: Input audio. Supports wav, webm, mp3 or flac. Max 50MB. responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/SeparationJob' '401': $ref: '#/components/responses/Unauthorized' '422': $ref: '#/components/responses/UnprocessableEntity' '429': $ref: '#/components/responses/TooManyRequests' get: tags: - Stem Splitter operationId: listStemSplits summary: Fetch stem splitter jobs description: Returns a paginated list of stem splitter jobs. parameters: - $ref: '#/components/parameters/Order' - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PerPage' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/PaginatedSeparationJobs' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/TooManyRequests' /stem-splits/{id}: get: tags: - Stem Splitter operationId: getStemSplit summary: Fetch a stem splitter job by ID description: Returns a single stem splitter job by id. parameters: - $ref: '#/components/parameters/JobId' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/SeparationJob' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '429': $ref: '#/components/responses/TooManyRequests' components: parameters: JobId: name: id in: path required: true schema: type: integer PerPage: name: perPage in: query description: Page size (default 10). schema: type: integer default: 10 Page: name: page in: query description: Page offset (default 1). schema: type: integer default: 1 Order: name: order in: query description: Sort order, asc (default) or desc. schema: type: string enum: - asc - desc default: asc schemas: PaginatedSeparationJobs: type: object properties: data: type: array items: $ref: '#/components/schemas/SeparationJob' meta: $ref: '#/components/schemas/PaginationMeta' PaginationMeta: type: object properties: total: type: integer perPage: type: integer currentPage: type: integer lastPage: type: integer firstPage: type: integer firstPageUrl: type: string lastPageUrl: type: string nextPageUrl: type: string nullable: true previousPageUrl: type: string nullable: true SeparationJob: type: object description: A vocal separation or stem splitter job. properties: id: type: integer createdAt: type: string type: type: string enum: - separate status: type: string enum: - running - success - error - cancelled jobStartTime: type: string nullable: true jobEndTime: type: string nullable: true vocalAudioFileUrl: type: string nullable: true lossyVocalAudioFileUrl: type: string nullable: true backingAudioFileUrl: type: string nullable: true deprecated: true description: DEPRECATED. Use stemFileUrls or lossyStemFileUrls with instrument "backing" instead. stemFileUrls: type: array nullable: true items: $ref: '#/components/schemas/StemFile' lossyStemFileUrls: type: array nullable: true items: $ref: '#/components/schemas/StemFile' StemFile: type: object properties: instrument: type: string url: type: string responses: Forbidden: description: Attempted to fetch a resource that does not belong to the requesting user. content: text/plain: schema: type: string TooManyRequests: description: Rate limit exceeded. content: text/plain: schema: type: string Unauthorized: description: Authentication was not provided or was invalid. content: text/plain: schema: type: string UnprocessableEntity: description: Request body or query params are invalid. content: text/plain: schema: type: string securitySchemes: bearerAuth: type: http scheme: bearer description: 'API key issued from the Kits AI API access page (https://app.kits.ai/api-access), sent as `Authorization: Bearer `.'