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

# Extractor Submissions

> Submit custom extractors for review and inclusion in the Mixpeek extractor catalog

> [card] [Browse the extractor catalog on GitHub](https://github.com/mixpeek/mixpeek-extractors)
>
> Runnable reference for every built-in Mixpeek extractor — inputs, parameters, output fields, embedding models, and copy-paste examples. Auto-generated from the live registry, so it always matches production.

> [!WARNING]
>
> **Marketplace Deprecated.** The self-service marketplace (publish/install/browse via `/v1/plugins/...` and `/v1/public/plugins/...`) has been removed. The SDK methods `client.plugins.publish()`, `client.plugins.marketplace.list()`, and `client.plugins.install()` no longer exist.
>
> Extractor sharing now uses the **submission workflow** described below.

## How It Works

Instead of a self-service marketplace, community extractors follow a submission and review process:

1. **Develop** — Build your extractor following the [Custom Extractors guide](https://docs.mixpeek.com/docs/processing/custom-extractors.md)
2. **Submit** — Upload your extractor archive via `POST /v1/extractors/submissions`
3. **Review** — The Mixpeek team reviews the submission for quality, security, and compatibility
4. **Merge** — Approved extractors join the built-in catalog

```mermaid theme={null}
graph LR
    A[Develop Extractor] --> B[Submit Archive]
    B --> C[Mixpeek Reviews]
    C --> D[Approved & Merged]
    D --> E[Available as built-in extractor]
```

## Submitting an Extractor

Package your extractor as a zip archive and submit it for review:

```bash theme={null}
# Package your extractor
zip -r my_text_extractor.zip my_text_extractor/

# Submit for review
curl -X POST "https://api.mixpeek.com/v1/extractors/submissions" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: multipart/form-data" \
  -F "archive=@my_text_extractor.zip" \
  -F "display_name=My Text Extractor" \
  -F "description=Advanced text extraction with custom NLP models" \
  -F "category=text-processing"
```

### Submission Requirements

* Extractor must pass validation and security scan (same rules as custom extractor uploads)
* Include a complete `manifest.py` with correct `features` definitions
* Include working `pipeline.py` and optionally `realtime.py`
* Archive must be under 500 MB

### One-file YAML extractors

An archive that holds a single YAML manifest configures a built-in extractor instead of shipping code. It names the base with `extends` and can point the vector index at another embedding model, including one your organization uploaded (`org:<model_id>`). Set `output.vector_index.dimensions` to state the vector length the model returns. Validation runs one sample inference and rejects the extractor, with the traceback, when the vectors have another length or when the uploaded model's recorded dimension differs. The index is always sized from the model.

```yaml theme={null}
name: brand_text
version: v1
extends: text_extractor/v1
output:
  vector_index:
    model: org:mdl_7f3a9c
    dimensions: 384
```

## Review Process

After submission:

1. The archive is validated and scanned automatically
2. The Mixpeek team reviews the extractor code for quality and security
3. If approved, the extractor joins the built-in catalog
4. The submitting organization is notified and the extractor becomes available to all users

## Trust Tiers

| Tier | Description |
| - | - |
| `community` | Extractors submitted by community members and approved by Mixpeek |
| `verified` | Extractors with additional performance and reliability validation |
| `official` | Extractors developed and maintained by Mixpeek |

## Using Approved Extractors

Once an extractor is approved and merged, it works like any built-in extractor. Reference it by name and version in your collection configuration:

```python theme={null}
# Create a collection using the approved extractor
client.collections.create(
    namespace_id="ns_abc123",
    collection_name="my-collection",
    source={"type": "bucket", "bucket_ids": ["bkt_xyz"]},
    feature_extractor={
        "feature_extractor_name": "text_extractor",
        "version": "v1",
        "input_mappings": {"text": "description"},
    }
)
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.