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

# Create a link request

> Creates a link request for an MDT in the current guild context.

Server-side behavior:
- Validates `mdt_id` exists (activation code lookup).
- Sets `owner_discord_id` based on the MDT activation record (if available).
- Creates the request with status `pending`.




## OpenAPI

````yaml /openapi.yaml post /link-requests
openapi: 3.1.0
info:
  title: Northca Partner API
  version: 1.1.0
  description: >-
    Partner-facing REST API for ER:LC and MC communities using Northca MDT.

    ## Response format

    All endpoints return JSON wrapped as:

    **Success**: `{ "ok": true, "data": ... }` **Error**: `{ "ok": false,
    "error": "..." }` 
servers:
  - url: https://api.northca.dev/v1
    description: Production (v1)
security:
  - PartnerKey: []
tags:
  - name: Link Requests
    description: >-
      Request and manage linking a Northca MDT to your ER:LC partner
      integration.
  - name: MDT Links
    description: List linked MDTs and unlink (owner-only) in a guild.
  - name: MDT Info
    description: Read public MDT configuration/info (map, departments, settings).
  - name: Calls
    description: Create, list, and update dispatch calls (CAD).
  - name: Scene Reports
    description: Create and list scene reports (incident summaries).
  - name: Shifts
    description: Create and list shifts (duty sessions).
  - name: Tickets
    description: Create and list unit tickets (tasks/citations/notes).
  - name: Active Units
    description: Upsert, list, delete active units, and trigger panic events (10-33).
paths:
  /link-requests:
    post:
      tags:
        - Link Requests
      summary: Create a link request
      description: >
        Creates a link request for an MDT in the current guild context.


        Server-side behavior:

        - Validates `mdt_id` exists (activation code lookup).

        - Sets `owner_discord_id` based on the MDT activation record (if
        available).

        - Creates the request with status `pending`.
      parameters:
        - $ref: '#/components/parameters/XDiscordGuild'
        - $ref: '#/components/parameters/XDiscordActor'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateLinkRequestBody'
      responses:
        '201':
          description: Link request created.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/OkEnvelope'
                  - type: object
                    properties:
                      data:
                        $ref: '#/components/schemas/LinkRequest'
        '400':
          description: Invalid body or `mdt_id`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
              examples:
                missingField:
                  value:
                    ok: false
                    error: 'Missing required fields: mdt_id'
                invalidMdt:
                  value:
                    ok: false
                    error: Invalid mdt_id
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/ServerError'
components:
  parameters:
    XDiscordGuild:
      name: x-discord-guild
      in: header
      required: true
      schema:
        type: string
      description: Discord Guild ID (server/guild context for the request).
      example: '123456789012345678'
    XDiscordActor:
      name: x-discord-actor
      in: header
      required: false
      schema:
        type: string
      description: Discord User ID for the acting user (optional; used for audit fields).
      example: '222222222222222222'
  schemas:
    CreateLinkRequestBody:
      type: object
      required:
        - mdt_id
      additionalProperties: false
      properties:
        mdt_id:
          type: string
          description: MDT ID you want to link.
      example:
        mdt_id: 0c7f6a0c-2c4f-4f44-b16a-2b6b8d8fe2c2
    OkEnvelope:
      type: object
      required:
        - ok
        - data
      properties:
        ok:
          type: boolean
          const: true
        data:
          description: Response payload.
          nullable: false
          type: object
          additionalProperties: true
    LinkRequest:
      type: object
      description: Link request created for an MDT.
      additionalProperties: true
      properties:
        id:
          type: string
        partner:
          type: string
          nullable: true
        mdt_id:
          type: string
        guild_id:
          type: string
        status:
          type: string
          enum:
            - pending
            - approved
            - denied
            - expired
        requester_discord_id:
          type: string
          nullable: true
        owner_discord_id:
          type: string
          nullable: true
        created_at:
          type: string
          format: date-time
          nullable: true
        expires_at:
          type: string
          format: date-time
          nullable: true
        decided_at:
          type: string
          format: date-time
          nullable: true
    ErrorEnvelope:
      type: object
      required:
        - ok
        - error
      properties:
        ok:
          type: boolean
          const: false
        error:
          type: string
      additionalProperties: true
      example:
        ok: false
        error: Unauthorized
  responses:
    Unauthorized:
      description: Missing/invalid authentication or required headers.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            ok: false
            error: Unauthorized
    ServerError:
      description: Internal server error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
  securitySchemes:
    PartnerKey:
      type: apiKey
      in: header
      name: x-partner-key
      description: Partner API key provided by Northca.

````