NIN Connect Docs
REST API

Submissions API

POST /api/v1/submissions — programmatically submit plugin proposals via API key, with inline tools and auth methods.

List Submissions

GET /api/v1/submissions

Returns all plugins created by the authenticated developer.

Authentication

API key required: Authorization: Bearer nk_live_...

Response

{
  "plugins": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "slug": "my-plugin",
      "name": "My Plugin",
      "description": "A custom integration",
      "reviewStatus": "draft",
      "adminNotes": null,
      "createdAt": "2025-03-15T10:30:00.000Z"
    }
  ]
}

Response Fields

FieldTypeDescription
idstringPlugin UUID
slugstringUnique identifier
namestringDisplay name
descriptionstring or nullPlugin description
reviewStatusstringdraft, pending_review, approved, declined, or revision_requested
adminNotesstring or nullFeedback from admin (when declined or revision requested)
createdAtstringISO 8601 timestamp

Create Submission

POST /api/v1/submissions

Create a new plugin submission, optionally including inline tools and auth methods. The plugin can be saved as a draft or immediately submitted for review.

Authentication

API key required: Authorization: Bearer nk_live_...

Request Body

{
  "slug": "weather-api",
  "name": "Weather API",
  "description": "Current weather and forecast data",
  "baseUrl": "https://api.weather.example.com",
  "iconUrl": "https://example.com/weather-icon.png",
  "toolSource": "manual",
  "categoryIds": ["uuid-1"],
  "submitForReview": true,
  "tools": [
    {
      "slug": "GET_CURRENT_WEATHER",
      "name": "Get Current Weather",
      "description": "Returns current weather for a city",
      "method": "GET",
      "path": "/v1/current/{city}",
      "inputSchema": {
        "type": "object",
        "properties": {
          "city": { "type": "string" }
        },
        "required": ["city"]
      }
    }
  ],
  "authMethods": [
    {
      "type": "api_key",
      "label": "API Key Auth",
      "isDefault": true,
      "config": {
        "header_name": "X-API-Key"
      }
    }
  ]
}

Request Fields

FieldTypeRequiredDescription
slugstringYesURL-safe identifier (lowercase, hyphens/underscores)
namestringYesDisplay name
descriptionstringNoWhat the plugin does
baseUrlstringNoAPI root URL. Required for manual tool source.
iconUrlstringNoPlugin icon URL
toolSourcestringNomanual (default), mcp, or both
mcpConfigobjectNoMCP server configuration
categoryIdsarrayNoArray of category UUIDs to associate
submitForReviewbooleanNotrue to immediately submit; false (default) to save as draft
toolsarrayNoInline tool definitions (see Tools API for schema)
authMethodsarrayNoInline auth method definitions (see Auth System)

Tool Object

FieldTypeRequiredDescription
slugstringYesUnique tool slug within the plugin
namestringYesDisplay name
descriptionstringYesDescription shown to AI agents
methodstringYesHTTP method (GET, POST, PUT, PATCH, DELETE)
pathstringYesURL path appended to plugin base URL
inputSchemaobjectNoJSON Schema for parameters
outputSchemaobjectNoJSON Schema for response
headersobjectNoStatic headers merged per request

Auth Method Object

FieldTypeRequiredDescription
typestringYesoauth2, bearer_token, api_key, service_account, custom, no_auth
labelstringYesHuman-readable name
isDefaultbooleanNoWhether this is the default method (default false)
configobjectNoType-specific configuration

Response

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "slug": "weather-api",
  "reviewStatus": "pending_review"
}

Example: cURL

curl -X POST https://your-domain.com/api/v1/submissions \
  -H "Authorization: Bearer nk_live_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "slug": "weather-api",
    "name": "Weather API",
    "description": "Current weather and forecast data",
    "baseUrl": "https://api.weather.example.com",
    "toolSource": "manual",
    "submitForReview": true,
    "tools": [
      {
        "slug": "GET_CURRENT_WEATHER",
        "name": "Get Current Weather",
        "description": "Returns current weather for a city",
        "method": "GET",
        "path": "/v1/current/{city}",
        "inputSchema": {
          "type": "object",
          "properties": { "city": { "type": "string" } },
          "required": ["city"]
        }
      }
    ],
    "authMethods": [
      {
        "type": "api_key",
        "label": "API Key Auth",
        "isDefault": true,
        "config": { "header_name": "X-API-Key" }
      }
    ]
  }'

On this page