Kardinal Core API

The Core API from Kardinal — 4 operation(s) for core.

Business capability
Transport Operations Management BC-2420

Operations 4

POST /login Login (returns an OTP token if MFA is configured for the user) #
POST /login/otp Confirm login with OTP #
PUT /agencies/{agencyId}/plans/{planId} Create or update a plan #
GET /agencies/{agencyId}/plans/{planId}/solution Retrieve a plan solution #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/kardinal-core-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

kardinal-core-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Kardinal ARO Core API
  version: 2.55.0
  description: This document specifies the REST API of Kardinal ARO v2.
  contact:
    url: https://kardinal.ai/
    email: contact@kardinal.ai
servers:
- url: /api/v2
security:
- access_token: []
tags:
- name: Core
paths:
  /login:
    post:
      summary: Login (returns an OTP token if MFA is configured for the user)
      operationId: postLogin
      tags:
      - Core
      security: []
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Login'
      responses:
        '200':
          description: The login succeeded.
          content:
            application/json:
              schema:
                oneOf:
                - $ref: '#/components/schemas/EnvelopedLoginOTPOutput'
                - $ref: '#/components/schemas/EnvelopedLoginGDPROutput'
                - $ref: '#/components/schemas/EnvelopedLoginMFAOutput'
                - $ref: '#/components/schemas/EnvelopedLoginAccessOutput'
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /login/otp:
    post:
      summary: Confirm login with OTP
      operationId: postLoginOTP
      tags:
      - Core
      security:
      - otp_token: []
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
              - $ref: '#/components/schemas/LoginOTPInput'
              - $ref: '#/components/schemas/LoginBackupCodeInput'
      responses:
        '200':
          description: The login succeeded.
          content:
            application/json:
              schema:
                oneOf:
                - $ref: '#/components/schemas/EnvelopedLoginGDPROutput'
                - $ref: '#/components/schemas/EnvelopedLoginAccessOutput'
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /agencies/{agencyId}/plans/{planId}:
    parameters:
    - $ref: '#/components/parameters/agencyId'
    - $ref: '#/components/parameters/planId'
    put:
      summary: Create or update a plan
      operationId: putPlan
      tags:
      - Core
      parameters:
      - $ref: '#/components/parameters/force'
      requestBody:
        description: The Plan to update.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Plan'
      responses:
        '200':
          description: Plan response updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnvelopedPlan'
        '201':
          description: Plan response created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnvelopedPlan'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/NotAuthenticated'
        '403':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /agencies/{agencyId}/plans/{planId}/solution:
    parameters:
    - $ref: '#/components/parameters/agencyId'
    - $ref: '#/components/parameters/planId'
    get:
      summary: Retrieve a plan solution
      operationId: getPlanSolution
      tags:
      - Core
      responses:
        '200':
          description: Solution response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnvelopedSolution'
        '401':
          $ref: '#/components/responses/NotAuthenticated'
        '403':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  schemas:
    WayPointBegin:
      type: object
      properties:
        type:
          type: string
          enum:
          - begin
          description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
        position:
          $ref: '#/components/schemas/Position'
        status:
          example: fixed
          allOf:
          - $ref: '#/components/schemas/WayPointStatus'
        departureTime:
          $ref: '#/components/schemas/DateTime'
        violations:
          type: array
          items:
            $ref: '#/components/schemas/WaypointViolation'
          description: List of the Waypoint's violations.
        fromPrevious:
          $ref: '#/components/schemas/FromPrevious'
      required:
      - type
      - position
      description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
    LoginOTPOutput:
      type: object
      properties:
        otpToken:
          type: string
          description: A JWT token with scope 'otp' valid for 10 minutes.
          example: eyJhbGciOiJFZERTQSJ9.eyJhdW...QwOJAQ
        preferredType:
          $ref: '#/components/schemas/OTPType'
        availableTypes:
          description: The list of OTP types which have been configured by the actor in his MFA configuration
          type: array
          readOnly: true
          items:
            $ref: '#/components/schemas/OTPType'
          example:
          - email
          - sms
          - totp
        email:
          $ref: '#/components/schemas/ObfuscatedEmail'
        phoneNumber:
          $ref: '#/components/schemas/ObfuscatedPhoneNumber'
      description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
    CountryCodes:
      type: array
      items:
        $ref: '#/components/schemas/CountryCode'
      example:
      - Switzerland
      - BE
      - ITA
    GDPRToken:
      type: string
      description: A JSON Web Token with scope 'gdpr', to be used to approve a GDPR policy, valid for 1 hour.
      example: eyJhbGciOiJFZERTQSJ9.eyJhdW...cMp9DA
    EnvelopedLoginMFAOutput:
      type: object
      description: An object containing a 'mfa' JSON Web Token, returned by a successful login of a user which needs to setup MFA authentication.
      properties:
        item:
          type: object
          properties:
            mfaToken:
              $ref: '#/components/schemas/MFAToken'
          description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
        access_token:
          allOf:
          - deprecated: true
          - $ref: '#/components/schemas/MFAToken'
    Password:
      type: string
      format: password
      description: "A user password must contain at least:\n- 1 number,\n- 1 uppercase letter,\n- 1 lowercase letter,\n- 1 special character amongst the following:\n  !\"#$%&'()*+,-./:;<=>?@[]^_`{|}~\n- 12 characters.\nAnd it must not exceed 72 bytes.\n"
      allOf:
      - type: string
        pattern: .*[0-9]{1}
      - type: string
        pattern: .*[A-Z]{1}
      - type: string
        pattern: .*[a-z]{1}
      - type: string
        pattern: .*[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]{1}
      - type: string
        pattern: ^.{12,72}$
    OrderViolation:
      type: object
      description: Violation of a order's stops constraint.
      properties:
        type:
          type: string
          enum:
          - order
          description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
        expectedOrderedStopIds:
          description: The stop ids in the expected order.
          type: array
          items:
            type: string
            allOf:
            - $ref: '#/components/schemas/RegexIdValidation'
        missedStopIds:
          description: The stop ids missing from the tour.
          type: array
          items:
            type: string
            allOf:
            - $ref: '#/components/schemas/RegexIdValidation'
        badlyOrderedStopIds:
          description: The stop ids badly ordered in the tour.
          type: array
          items:
            type: string
            allOf:
            - $ref: '#/components/schemas/RegexIdValidation'
      required:
      - type
      - expectedOrderedStopIds
    MaxInterStopDurationViolation:
      type: object
      description: Violation of a resource's MaxInterStopDuration constraint.
      properties:
        type:
          type: string
          enum:
          - maxInterStopDuration
          description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
        wayPointIndex:
          type: integer
          description: The idx of the waypoint the violation applies to.
          example: 0
        maxInterStopDuration:
          description: The expected maximum inter-stop duration.
          allOf:
          - $ref: '#/components/schemas/Duration'
        exceededDuration:
          description: The inter-stop duration that exceeds the maximum duration.
          allOf:
          - $ref: '#/components/schemas/Duration'
      required:
      - type
      - maxInterStopDuration
      - exceededDuration
    Duration:
      type: string
      description: A period of time, expressed in the ISO8601 **duration** format.
      pattern: ^P(\d+Y)?(\d+M)?(\d+W)?(\d+D)?(T(\d+H)?(\d+M)?(\d+S)?)?$
      example: PT4M
    EnvelopedErrors:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Error'
      description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
    AdditionalConstraintCapacities:
      type: object
      description: This constraint is valid if all the capacities are satisfied.
      properties:
        type:
          type: string
          enum:
          - capacities
          description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
        name:
          type: string
          description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
        capacities:
          $ref: '#/components/schemas/Capacities'
        resourceTag:
          type: string
          allOf:
          - $ref: '#/components/schemas/RegexIdValidation'
      required:
      - type
      - capacities
      - resourceTag
    User:
      type: object
      description: A user is a person who can use Platform's services.
      properties:
        id:
          type: string
          format: uuid
          description: Kardinal's unique identifier.
          readOnly: true
          example: 483fad31-415d-4d9e-8edd-c8f936e71520
        username:
          $ref: '#/components/schemas/Username'
        type:
          $ref: '#/components/schemas/UserType'
        password:
          writeOnly: true
          description: The user's password.
          allOf:
          - $ref: '#/components/schemas/Password'
        role:
          $ref: '#/components/schemas/Role'
        firstname:
          type:
          - string
          - 'null'
          description: The user's first name.
          example: Martin
        lastname:
          type:
          - string
          - 'null'
          description: The user's last name.
          example: DUPONT
        level:
          $ref: '#/components/schemas/Level'
        countries:
          description: The countries whose data the user is allowed to see.
          allOf:
          - $ref: '#/components/schemas/CountryIds'
        regions:
          description: The regions whose data the user is allowed to see.
          allOf:
          - $ref: '#/components/schemas/RegionIds'
        agencies:
          description: The agencies whose data the user is allowed to see.
          allOf:
          - $ref: '#/components/schemas/AgencyIds'
        active:
          description: Represents whether the user is enabled or disabled internally.
          example: true
          type: boolean
        status:
          $ref: '#/components/schemas/UserStatus'
        lastLoginAt:
          description: Represents the last login date of the user.
          allOf:
          - $ref: '#/components/schemas/DateTime'
        createdAt:
          description: The user's creation date.
          readOnly: true
          allOf:
          - $ref: '#/components/schemas/DateTime'
        updatedAt:
          description: The user's last update date.
          readOnly: true
          allOf:
          - $ref: '#/components/schemas/DateTime'
        clientId:
          description: 'The id of the client whom the user is linked to.

            It can be empty for a user which level is greater than ''owner''.


            When creating a new user, this id can be left empty if:

            - the caller has the level ''region'' or ''country'' or ''owner'': in this case, the clientId of the new user is inherited from the clientId of the caller,

            - the new user has a level greater than ''owner''.

            '
          allOf:
          - $ref: '#/components/schemas/ClientId'
        gdprInfo:
          type: object
          properties:
            version:
              type: string
            approvedAt:
              $ref: '#/components/schemas/DateTime'
          description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
        managedClientsIds:
          type: array
          description: 'For an ''admin'' user only: the ids of the clients which are managed by this user.'
          items:
            $ref: '#/components/schemas/ClientId'
      required:
      - username
    AdditionalConstraintMaxStopTagGroups:
      type: object
      description: If the tour has stops whose stopTags constitute too many groups, then the tour is invalid.
      properties:
        type:
          type: string
          enum:
          - maxStopTagGroups
          description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
        name:
          type: string
          description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
        resourceTags:
          type: array
          items:
            type: string
            allOf:
            - $ref: '#/components/schemas/RegexIdValidation'
          example:
          - subcontractorA
          - subcontractorB
        maxGroupsByStopTag:
          $ref: '#/components/schemas/MaxGroupsByStopTag'
          description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
      required:
      - type
      - maxGroupsByStopTag
    AuthorizedTimeWindowViolation:
      type: object
      description: Violation of a stop's TimeWindow constraint.
      properties:
        type:
          type: string
          enum:
          - authorizedTimeWindow
          description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
        wayPointIndex:
          type: integer
          description: The idx of the waypoint the violation applies to.
          example: 0
        forbiddenWindow:
          description: The violated forbidden window.
          allOf:
          - $ref: '#/components/schemas/TimeWindow'
        actualTime:
          description: The time at which the waypoint is actually executed.
          allOf:
          - $ref: '#/components/schemas/DateTime'
      required:
      - type
      - forbiddenWindow
      - actualTime
    RegexIdValidation:
      type: string
      description: 'At least one character among those allowed: unaccented alpha-numeric characters, "-", ".", "_", "~", ":", "@", "!", "$", ",".'
      pattern: ^[a-zA-Z0-9-._~:@!$,]+$
    ForbiddenAssignmentViolation:
      type: object
      description: Violation of a ForbiddenAssignment constraint.
      properties:
        type:
          type: string
          enum:
          - forbiddenAssignment
          description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
        wayPointIndex:
          type: integer
          description: The idx of the waypoint the violation applies to.
          example: 0
        forbiddenAssignments:
          type: array
          items:
            $ref: '#/components/schemas/ForbiddenAssignment'
          description: The list of forbidden assignments that are violated with the waypoint assigned to the resource.
      required:
      - type
    Properties:
      type: object
      additionalProperties:
        type: string
      description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
    PlanObjectives:
      type: array
      items:
        oneOf:
        - $ref: '#/components/schemas/ObjectivesEnum'
        - $ref: '#/components/schemas/MaximizePrecedencesObjective'
        - $ref: '#/components/schemas/CustomObjective'
      default:
      - maximizeMandatoryStops
      - minimizeDelay
      - minimizeCosts
      - minimizeResources
      - minimizeOverOverlappingCapacitiesOnStops
      - maximizeOptionalStops
      - maximizePreferredStops
      - minimizeWorkingDuration
      - minimizeDistance
      description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
    WayPointStop:
      type: object
      properties:
        type:
          type: string
          enum:
          - stop
          description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
        stopId:
          type: string
          allOf:
          - $ref: '#/components/schemas/RegexIdValidation'
        position:
          $ref: '#/components/schemas/Position'
        status:
          example: optimized
          allOf:
          - $ref: '#/components/schemas/WayPointStatus'
        stopProperties:
          $ref: '#/components/schemas/Properties'
        orderProperties:
          $ref: '#/components/schemas/Properties'
        filledCapacitiesAfterStop:
          $ref: '#/components/schemas/Capacities'
        delay:
          description: Delay related to the stop's preferred time windows.
          allOf:
          - $ref: '#/components/schemas/Duration'
        arrivalTime:
          $ref: '#/components/schemas/DateTime'
        beginTime:
          $ref: '#/components/schemas/DateTime'
        departureTime:
          $ref: '#/components/schemas/DateTime'
        violations:
          type: array
          items:
            $ref: '#/components/schemas/WaypointViolation'
          description: List of the Waypoint's violations.
        fromPrevious:
          $ref: '#/components/schemas/FromPrevious'
        stopKind:
          $ref: '#/components/schemas/StopKind'
      required:
      - type
      - position
      description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
    OTPValue:
      type: string
      description: A 6-digits OTP code.
      example: '403852'
    AdditionalConstraintAtLeastOneConstraint:
      type: object
      description: If one of the constraint is valid, then the tour is valid.
      properties:
        type:
          type: string
          enum:
          - atLeastOneConstraint
          description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
        name:
          type: string
          description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
        constraints:
          type: array
          items:
            oneOf:
            - $ref: '#/components/schemas/AdditionalConstraintAtLeastOneValidCapacity'
            - $ref: '#/components/schemas/AdditionalConstraintForbiddenAssignment'
            - $ref: '#/components/schemas/AdditionalConstraintIncompatibleStopTags'
            - $ref: '#/components/schemas/AdditionalConstraintAtLeastOneConstraint'
            - $ref: '#/components/schemas/AdditionalConstraintCapacities'
            - $ref: '#/components/schemas/AdditionalConstraintMaxStopTagGroups'
            - $ref: '#/components/schemas/AdditionalConstraintRemovalStrategy'
          description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
      required:
      - type
      - constraints
    SolutionObjective:
      type: object
      properties:
        name:
          type: string
          allOf:
          - $ref: '#/components/schemas/RegexIdValidation'
        priority:
          type: integer
          description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
        direction:
          $ref: '#/components/schemas/OptimizationDirection'
        value:
          type: number
          description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
      description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
    TimeWindow:
      type: object
      properties:
        begin:
          $ref: '#/components/schemas/DateTime'
        end:
          $ref: '#/components/schemas/DateTime'
      required:
      - begin
      - end
      description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
    IncompatibleStopTags:
      type: array
      description: Incompatibilities between stop tags (all elements must be different regardless of order).
      uniqueItems: true
      deprecated: true
      items:
        $ref: '#/components/schemas/StopTagPair'
      example:
      - - goat
        - cabbage
      - - wolf
        - goat
    AlternativesStop:
      type: object
      description: A stop composed of different alternative single stops.
      properties:
        id:
          allOf:
          - $ref: '#/components/schemas/RegexIdValidation'
        type:
          type: string
          enum:
          - alternatives
          description: Discriminator identifying this as an alternatives stop, as opposed to a single stop.
        alternatives:
          type: array
          items:
            allOf:
            - $ref: '#/components/schemas/SingleStop'
          description: The list of single stops among which the algorithm must choose the best one to visit (for example choosing among multiple charging points or waste disposal sites). Using alternatives can increase optimization time.
      required:
      - type
      - alternatives
    Username:
      type: string
      description: The username is used for login, it is unique for each user, it can be either an email (for clients) or a regular username (for Kardinal's internal users).
      example: martin.dupont@kardinal.ai
      oneOf:
      - $ref: '#/components/schemas/RegexNotEmpty'
      - $ref: '#/components/schemas/Email'
    PlanStatus:
      type: object
      readOnly: true
      properties:
        planVersionInSolution:
          description: The plan version taken into account in the current solution.
          allOf:
          - $ref: '#/components/schemas/PlanVersion'
        waitingRoom:
          description: If the maximum number of simultaneous running plans has already been reached, the plan waits in the waiting room for one of the running plans to finish.
          allOf:
          - $ref: '#/components/schemas/PlanStatusVersion'
        waitingTraffic:
          description: The plan is waiting for its traffic coefficients to be computed.
          allOf:
          - $ref: '#/components/schemas/PlanStatusVersion'
        creation:
          description: The plan is being created in order to be optimized.
          allOf:
          - $ref: '#/components/schemas/PlanStatusVersion'
        optimization:
          description: The plan is being optimized.
          allOf:
          - $ref: '#/components/schemas/PlanStatusVersion'
      description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
    Role:
      type: string
      description: The user's role.
      enum:
      - analyst
      - expert
      - super
      default: analyst
      example: expert
    CountryIds:
      type: array
      description: A list of country identifiers.
      items:
        $ref: '#/components/schemas/CountryId'
      example:
      - LND_France
      - LND_Belgique
    Plan:
      type: object
      description: A plan for a date and agency, with resource and orders associated.
      properties:
        id:
          $ref: '#/components/schemas/PlanId'
        agencyId:
          $ref: '#/components/schemas/AgencyId'
        version:
          $ref: '#/components/schemas/PlanVersion'
        running:
          type: boolean
          description: To know if the plan is running.
          readOnly: true
        status:
          allOf:
          - $ref: '#/components/schemas/PlanStatus'
          description: The plan's processing status across the optimization pipeline (waiting room, creation, optimization, and traffic-waiting stages), each tracking which plan version is currently waiting and currently running. Poll this field to know when a new solution is ready instead of relying on a push/webhook mechanism. See PlanStatus for the full breakdown of each stage.
        state:
          allOf:
          - $ref: '#/components/schemas/PlanState'
        properties:
          allOf:
          - $ref: '#/components/schemas/Properties'
          description: Free-form key-value pairs (strings only) with no impact on optimization. Used to carry integration-specific information (for example an internal reference) that is returned unchanged in the plan and its solution. Can also be set on resources, orders, and stops.
        resources:
          type: array
          items:
            $ref: '#/components/schemas/Resource'
          description: The list of resources (vehicle/driver pairs) available to fulfill the plan's orders.
        nbResources:
          type: number
          format: integer
          minimum: 0
          readOnly: true
          description: The number of resources in the plan.
        orders:
          type: array
          items:
            $ref: '#/components/schemas/Order'
          description: The list of orders (sequences of stops) to be planned across the available resources.
        nbOrders:
          type: number
          format: integer
          minimum: 0
          readOnly: true
          description: The number of orders in the plan.
        additionalOperationDurations:
          type: array
          description: Additional operation time for a resource and a stop, according to tags (pairs of tags must be unique).
          uniqueItems: true
          items:
            $ref: '#/components/schemas/AdditionalOperationDuration'
        operationDurationPoliciesByResourceTag:
          type: object
          description: Policies to remove the operation durations, by resource tag.
          additionalProperties:
            type: array
            items:
              $ref: '#/components/schemas/OperationDurationPolicy'
        forbiddenAssignments:
          type: array
          uniqueItems: true
          deprecated: true
          items:
            $ref: '#/components/schemas/ForbiddenAssignment'
        incompatibleStopTags:
          allOf:
          - $ref: '#/components/schemas/IncompatibleStopTags'
        additionalConstraints:
          type: array
          items:
            oneOf:
            - $ref: '#/components/schemas/AdditionalConstraintAtLeastOneValidCapacity'
            - $ref: '#/components/schemas/AdditionalConstraintForbiddenAssignment'
            - $ref: '#/components/schemas/AdditionalConstraintIncompatibleStopTags'
            - $ref: '#/components/schemas/AdditionalConstraintAtLeastOneConstraint'
            - $ref: '#/components/schemas/AdditionalConstraintCapacities'
            - $ref: '#/components/schemas/AdditionalConstraintMaxStopTagGroups'
            - $ref: '#/components/schemas/AdditionalConstraintRemovalStrategy'
          description: A list of advanced constraints that go beyond what the standard modeling objects (resources, orders, stops) can express, each identified by a type (for example atLeastOneValidCapacity, forbiddenAssignment, incompatibleStopTags, atLeastOneConstraint, capacities, maxStopTagGroups, or removalStrategy). See the constraints catalog for the full list and their parameters.
        globalConstraints:
          type: array
          description: List of global constraints to be satisfied by the returned solution.
          items:
            oneOf:
            - $ref: '#/components/schemas/GlobalConstraintMaxCumulatedCost'
        accessDurationsByStopTag:
          type: object
          description: Access durations is an additional duration before the beginning of a group of stops with the same stop tag.
          additionalProperties:
            allOf:
            - $ref: '#/components/schemas/Duration'
          example:
            access:parking33: PT5M
        overlappingCapacitiesByStopTag:
          type: object
          description: This field allows users to define a limit in the number of resources that are simultaneously present at stops sharing the same stop tag.
          additionalProperties:
            type: integer
          example:
            capa:bat22: 3
        setupDurations:
          type: array
          items:
            $ref: '#/components/schemas/SetupDuration'
          description: Defines an additional duration incurred when a resource transitions from a stop tagged fromStopTag to a stop tagged toStopTag (for example customs crossings between countries, or cleaning required between incompatible cargo types), identified by the "setup:" tag convention.
        objectives:
          allOf:
          - $ref: '#/components/schemas/PlanObjectives'
          description: 'The ordered list of optimization objectives, processed lexicographically: the algorithm prioritizes improving higher-ranked objectives before lower-ranked ones, so the order should reflect business priorities. Defaults to a sequence that works well for most cases. See ObjectivesEnum for the available objectives.'
        maxOptimizationDuration:
          allOf:
          - $ref: '#/components/schemas/Duration'
        tz:
          $ref: '#/components/schemas/TimeZone'
        createdAt:
          description: The plan's creation datetime.
          readOnly: true
          allOf:
          - $ref: '#/components/schemas/DateTime'
        createdBy:
          type: string
          description: The username of the user who created this plan
          readOnly: true
        updatedAt:
          description: The plan's last update datetime.
          readOnly: true
          allOf:
          - $ref: '#/components/schemas/DateTime'
        updatedBy:
          type:
          - string
          - 'null'
          description: The username of the user who last updated this plan
          readOnly: true
        archivedAt:
          description: 'The plan''s archiving datetime: if not null, the plan is archived.'
          readOnly: true
          example: null
          allOf:
          - $ref: '#/components/schemas/DateTime'
        lateDeparture:
          description: True if lateDeparture is requested for Resources, false otherwise.
          type: boolean
          default: false
        sharedCapacities:
          description: True if sharedCapacities is requested for Resources, false otherwise. It enables resources to share capacities between stops of different orders.
          type: boolean
          default: false
        emptyThresholdByCapacityByResourceTag:
          description: 'Thresholds for capacities below which a resource is considered "empty" for empty distance calculation, grouped by resource tag.

            A resource is "empty" (kilometers traveled count as empty distance) when all capacities are at or below their threshold.

            The wildcard tag "*" matches all resources.

            '
          type: object
          additionalProperties:
            allOf:
            - $ref: '#/components/schemas/Capacities'
          example:
            heavy:
              weight: 150.0
              volume: 75.0
            '*':
              weight: 50.0
        avoidEarlyLoadingsByResourceTag:
          type: object
          description: 'Early loading declarations grouped by resource tag. The wildcard tag "*" matches all resources.

            Each entry identifies a stop tag and optional capacities used to compute the minimizeEarlyLoadings objective.

            '
          additionalProperties:
            type: array
            items:
              $ref: '#/components/schemas/AvoidEarlyLoading'
          example:
            '*':
            - stopTag: depot1
              capacities:
              - weight
              - volume
            heavy:
            - stopTag: warehouse
       

# --- truncated at 32 KB (119 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/kardinal/refs/heads/main/openapi/kardinal-core-api-openapi.yml