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

# Developer portal

> Create a developer profile and submit apps to the Feedal marketplace for other users to install.

The Developer Portal lets you build apps that extend Feedal — custom integrations, content-type plugins, and event hooks — and publish them to the [marketplace](/integrations/marketplace) for other users to install.

Access it from **Developers** in the sidebar.

***

## Creating a developer profile

Before submitting an app, set up a public developer profile. This is shown to users in the marketplace alongside your apps.

1. Go to **Developers → Profile**.
2. Fill in your details and click **Save**.

| Field            | Description                                              |
| ---------------- | -------------------------------------------------------- |
| **Display name** | Your name or organisation name, shown in the marketplace |
| **Website**      | Your website or documentation URL                        |
| **Description**  | A short bio or description of what you build             |

Once a profile exists, your account can submit apps for review.

***

## Submitting an app

<Steps>
  <Step title="Create the app record">
    Go to **Developers → Apps** and click **New app**. Fill in the name, description, category, and optionally an icon URL.
  </Step>

  <Step title="Write the manifest">
    Paste your plugin manifest JSON into the manifest editor. The manifest describes what your app does and where Feedal should send events or load UI bundles. See the [manifest schema](#manifest-schema) below.
  </Step>

  <Step title="Test delivery">
    Click **Test delivery** to fire a test payload to all `event_hook` endpoints declared in your manifest. The test log shows response codes and latency. Fix any failures before submitting for review.
  </Step>

  <Step title="Submit for review">
    When your app is working, click **Submit for review**. The Feedal team reviews manifests for security, correctness, and policy compliance. You'll receive an email when the review is complete.
  </Step>
</Steps>

***

## Manifest schema

The manifest is a JSON document that declares what your app does.

```json theme={null}
{
  "schema_version": "2.0",
  "id": "my-crm-integration",
  "name": "My CRM Integration",
  "version": "1.0.0",
  "author": {
    "name": "Acme Corp",
    "url": "https://acme.com"
  },
  "description": "Sync form responses to Acme CRM automatically.",
  "category": "crm",
  "extension_points": [
    {
      "type": "event_hook",
      "delivery_endpoint": "https://api.acme.com/webhooks/feedal",
      "events": ["session.completed"]
    }
  ]
}
```

### Extension point types

#### `event_hook`

Feedal POSTs to your `delivery_endpoint` every time one of the listed `events` fires. The payload is identical to the [standard webhook payload](/integrations/webhook#payload).

```json theme={null}
{
  "type": "event_hook",
  "delivery_endpoint": "https://api.example.com/webhooks/feedal",
  "events": ["session.completed"]
}
```

#### `content_type`

Registers a custom question type rendered via a sandboxed iframe. See [Content type plugins](/developer/content-type-plugins) for the full build guide.

```json theme={null}
{
  "type": "content_type",
  "question_type_id": "signature-capture",
  "display_name": "Signature Capture",
  "renderer_bundle_url": "https://cdn.example.com/signature-plugin/v1.0.0/bundle.esm.js",
  "version": "1.0.0",
  "icon": "✍️"
}
```

### Validation rules

* `schema_version`, `id`, `name`, `version`, and `extension_points` are required
* All URLs must use `https://`
* `id` must be unique across all your submitted apps
* `extension_points` must be a non-empty array

***

## App statuses

| Status     | Meaning                                       |
| ---------- | --------------------------------------------- |
| `pending`  | Submitted; awaiting Feedal review             |
| `approved` | Review passed; app is live in the marketplace |
| `rejected` | Review failed; see feedback in the portal     |

Rejected apps can be updated and resubmitted.

***

## Updating a published app

1. Edit the manifest or description in **Developers → Apps → your app**.
2. Increment the `version` field in the manifest.
3. Click **Submit for review** — updates go through the same review process.

***

## Next steps

<CardGroup cols={2}>
  <Card title="Content type plugins" icon="puzzle" href="/developer/content-type-plugins">
    Build a custom question type with the plugin SDK.
  </Card>

  <Card title="Marketplace" icon="store" href="/integrations/marketplace">
    Browse installed and available apps.
  </Card>
</CardGroup>
