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

# Create an agreement

> Creates an agreement. Status defaults to draft; an active agreement needs a title. Send an empty object to create an empty draft. Matching does not start until you refresh matched invoices. Repeating the request with the same Idempotency-Key returns the original agreement with 200.



## OpenAPI

````yaml /openapi.json post /v1/agreements
openapi: 3.1.0
info:
  title: Watchdog API
  version: 1.0.0
  description: >-
    The Watchdog API is served from https://api.watchdog.no. Request bodies are
    limited to 2 MiB unless an endpoint says otherwise. Files are uploaded
    directly to storage, not through the API.
servers:
  - url: https://api.watchdog.no
    description: Watchdog API
security: []
paths:
  /v1/agreements:
    post:
      tags:
        - Agreements
      summary: Create an agreement
      description: >-
        Creates an agreement. Status defaults to draft; an active agreement
        needs a title. Send an empty object to create an empty draft. Matching
        does not start until you refresh matched invoices. Repeating the request
        with the same Idempotency-Key returns the original agreement with 200.
      operationId: createAgreement
      parameters:
        - name: X-Organization-Id
          in: header
          required: false
          schema:
            type: string
          description: >-
            The organization to act in. Required for personal API keys; list the
            organizations you can access with GET /v1/organizations.
        - name: Idempotency-Key
          in: header
          required: false
          schema:
            type: string
            minLength: 1
            maxLength: 200
            pattern: ^[\x21-\x7e]+$
          description: >-
            Optional protection for safely retrying a request after a timeout or
            lost response. Choose a unique value (for example, a UUID) for each
            action and reuse it with the same input when retrying. Omit it for a
            normal request.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: string
                  enum:
                    - draft
                    - active
                    - archived
                  default: draft
                  description: Initial status. An active agreement needs a title.
                title:
                  type:
                    - string
                    - 'null'
                  maxLength: 500
                  default: null
                effective_date:
                  type:
                    - string
                    - 'null'
                  pattern: ^\d{4}-\d{2}-\d{2}$
                  default: null
                expiration_date:
                  type:
                    - string
                    - 'null'
                  pattern: ^\d{4}-\d{2}-\d{2}$
                  default: null
                supplier_ids:
                  type: array
                  items:
                    type: string
                    format: uuid
                  default: []
                  description: >-
                    Suppliers the agreement covers. An empty array matches no
                    invoices.
                recipient_ids:
                  type: array
                  items:
                    type: string
                    format: uuid
                  default: []
                  description: >-
                    Recipients the agreement covers. An empty array means any
                    recipient.
                tag_ids:
                  type: array
                  items:
                    type: string
                    format: uuid
                  default: []
                  description: >-
                    Tags to assign, replacing the current ones. An empty array
                    removes all tags. Tags do not affect matching or checks.
                project_ids:
                  type: array
                  items:
                    type: string
                    format: uuid
                  default: []
                  description: >-
                    Projects to assign, replacing the current selection. Empty
                    clears it. Classification only; does not affect matching or
                    checks.
                owner_user_id:
                  type:
                    - string
                    - 'null'
                  minLength: 1
                  maxLength: 200
                  pattern: ^[A-Za-z0-9_-]+$
                  description: >-
                    Omit to assign the creator; null leaves the agreement
                    unassigned.
                applicability:
                  type:
                    - object
                    - 'null'
                  properties:
                    match:
                      type: string
                      enum:
                        - all
                        - any
                    conditions:
                      type: array
                      items:
                        oneOf:
                          - type: object
                            properties:
                              field:
                                type: string
                                enum:
                                  - all_references
                                  - order_references
                                  - buyer_reference
                                  - seller_reference
                                  - contract_reference
                                  - project_reference
                                  - accounting_cost
                                  - delivery_address
                                  - delivery_name
                                  - delivery_street
                                  - delivery_postal_code
                                  - delivery_city
                                  - delivery_state
                                  - delivery_country
                              operator:
                                type: string
                                enum:
                                  - contains
                              values:
                                type: array
                                items:
                                  type: string
                                  minLength: 1
                                  maxLength: 2000
                                minItems: 1
                                maxItems: 100
                            required:
                              - field
                              - operator
                              - values
                            additionalProperties: false
                          - type: object
                            properties:
                              field:
                                type: string
                                enum:
                                  - all_references
                                  - order_references
                                  - buyer_reference
                                  - seller_reference
                                  - contract_reference
                                  - project_reference
                                  - accounting_cost
                                  - delivery_address
                                  - delivery_name
                                  - delivery_street
                                  - delivery_postal_code
                                  - delivery_city
                                  - delivery_state
                                  - delivery_country
                              operator:
                                type: string
                                enum:
                                  - not_contains
                              values:
                                type: array
                                items:
                                  type: string
                                  minLength: 1
                                  maxLength: 2000
                                minItems: 1
                                maxItems: 100
                            required:
                              - field
                              - operator
                              - values
                            additionalProperties: false
                          - type: object
                            properties:
                              field:
                                type: string
                                enum:
                                  - all_references
                                  - order_references
                                  - buyer_reference
                                  - seller_reference
                                  - contract_reference
                                  - project_reference
                                  - accounting_cost
                                  - delivery_address
                                  - delivery_name
                                  - delivery_street
                                  - delivery_postal_code
                                  - delivery_city
                                  - delivery_state
                                  - delivery_country
                              operator:
                                type: string
                                enum:
                                  - in
                              values:
                                type: array
                                items:
                                  type: string
                                  minLength: 1
                                  maxLength: 2000
                                minItems: 1
                                maxItems: 100
                            required:
                              - field
                              - operator
                              - values
                            additionalProperties: false
                          - type: object
                            properties:
                              field:
                                type: string
                                enum:
                                  - all_references
                                  - order_references
                                  - buyer_reference
                                  - seller_reference
                                  - contract_reference
                                  - project_reference
                                  - accounting_cost
                                  - delivery_address
                                  - delivery_name
                                  - delivery_street
                                  - delivery_postal_code
                                  - delivery_city
                                  - delivery_state
                                  - delivery_country
                              operator:
                                type: string
                                enum:
                                  - not_in
                              values:
                                type: array
                                items:
                                  type: string
                                  minLength: 1
                                  maxLength: 2000
                                minItems: 1
                                maxItems: 100
                            required:
                              - field
                              - operator
                              - values
                            additionalProperties: false
                          - type: object
                            properties:
                              field:
                                type: string
                                enum:
                                  - all_references
                                  - order_references
                                  - buyer_reference
                                  - seller_reference
                                  - contract_reference
                                  - project_reference
                                  - accounting_cost
                                  - delivery_address
                                  - delivery_name
                                  - delivery_street
                                  - delivery_postal_code
                                  - delivery_city
                                  - delivery_state
                                  - delivery_country
                              operator:
                                type: string
                                enum:
                                  - is_empty
                            required:
                              - field
                              - operator
                            additionalProperties: false
                          - type: object
                            properties:
                              field:
                                type: string
                                enum:
                                  - all_references
                                  - order_references
                                  - buyer_reference
                                  - seller_reference
                                  - contract_reference
                                  - project_reference
                                  - accounting_cost
                                  - delivery_address
                                  - delivery_name
                                  - delivery_street
                                  - delivery_postal_code
                                  - delivery_city
                                  - delivery_state
                                  - delivery_country
                              operator:
                                type: string
                                enum:
                                  - is_not_empty
                            required:
                              - field
                              - operator
                            additionalProperties: false
                      minItems: 1
                      maxItems: 100
                  default: null
                  required:
                    - match
                    - conditions
                  additionalProperties: false
                renewal:
                  type:
                    - object
                    - 'null'
                  properties:
                    mode:
                      type:
                        - string
                        - 'null'
                      enum:
                        - none
                        - optional
                        - automatic
                        - null
                      default: null
                    period:
                      type:
                        - object
                        - 'null'
                      properties:
                        value:
                          type: integer
                          exclusiveMinimum: 0
                          maximum: 2147483647
                        unit:
                          type: string
                          enum:
                            - days
                            - weeks
                            - months
                            - years
                      default: null
                      required:
                        - value
                        - unit
                      additionalProperties: false
                    occurrences_remaining:
                      type:
                        - integer
                        - 'null'
                      minimum: 0
                      maximum: 2147483647
                      default: null
                    notice_period:
                      type:
                        - object
                        - 'null'
                      properties:
                        value:
                          type: integer
                          exclusiveMinimum: 0
                          maximum: 2147483647
                        unit:
                          type: string
                          enum:
                            - days
                            - weeks
                            - months
                            - years
                      default: null
                      required:
                        - value
                        - unit
                      additionalProperties: false
                    deadline_override:
                      type:
                        - string
                        - 'null'
                      pattern: ^\d{4}-\d{2}-\d{2}$
                      default: null
                  default: null
                  additionalProperties: false
                instructions:
                  type:
                    - string
                    - 'null'
                  maxLength: 20000
                  default: null
                  description: >-
                    Extra context for compliance checks of this agreement. Null
                    clears it.
                alert_settings:
                  type: object
                  properties:
                    flag_undercharges:
                      type: boolean
                      default: false
                    flag_uncovered_items:
                      type: boolean
                      default: false
                  additionalProperties: false
                  description: >-
                    Which extra alerts to raise. Omit to use the organization
                    defaults; omitted flags are false.
                matching_settings:
                  type: object
                  properties:
                    smart_matching_enabled:
                      type: boolean
                      default: false
                    smart_matching_criterion:
                      type:
                        - string
                        - 'null'
                      minLength: 1
                      maxLength: 1000
                      default: null
                  default:
                    smart_matching_enabled: false
                    smart_matching_criterion: null
                  additionalProperties: false
                  description: >-
                    Smart matching settings. Replaces the whole object; omitted
                    values are false or null.
              additionalProperties: false
            example:
              title: Support services
              status: active
              effective_date: '2026-01-01'
              expiration_date: '2026-12-31'
      responses:
        '200':
          description: The resource.
          headers:
            X-Request-Id:
              schema:
                type: string
              required: true
              description: >-
                Request ID, also included in error bodies. Include it when
                contacting support.
            Cache-Control:
              schema:
                type: string
                enum:
                  - private, no-store
                  - private, no-store, no-transform
              required: false
              description: API responses are private and must not be cached.
            X-RateLimit-Limit:
              schema:
                type: string
                example: '500'
              required: false
              description: >-
                Requests allowed per minute for this credential, or failed API
                key attempts allowed per minute from this IP address.
            Location:
              schema:
                type: string
              required: false
              description: Relative URL of the created or accepted resource.
            ETag:
              schema:
                type: string
              required: true
              description: >-
                Version of the resource. Send it as If-Match to change it only
                if it has not changed since.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Agreement'
        '201':
          description: The resource.
          headers:
            X-Request-Id:
              schema:
                type: string
              required: true
              description: >-
                Request ID, also included in error bodies. Include it when
                contacting support.
            Cache-Control:
              schema:
                type: string
                enum:
                  - private, no-store
                  - private, no-store, no-transform
              required: false
              description: API responses are private and must not be cached.
            X-RateLimit-Limit:
              schema:
                type: string
                example: '500'
              required: false
              description: >-
                Requests allowed per minute for this credential, or failed API
                key attempts allowed per minute from this IP address.
            Location:
              schema:
                type: string
              required: false
              description: Relative URL of the created or accepted resource.
            ETag:
              schema:
                type: string
              required: true
              description: >-
                Version of the resource. Send it as If-Match to change it only
                if it has not changed since.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Agreement'
        '400':
          description: >-
            The request is invalid. details lists up to 20 field errors. Request
            bodies are limited to 2 MiB.
          headers:
            X-Request-Id:
              schema:
                type: string
              required: true
              description: >-
                Request ID, also included in error bodies. Include it when
                contacting support.
            Cache-Control:
              schema:
                type: string
                enum:
                  - private, no-store
                  - private, no-store, no-transform
              required: false
              description: API responses are private and must not be cached.
            X-RateLimit-Limit:
              schema:
                type: string
                example: '500'
              required: false
              description: >-
                Requests allowed per minute for this credential, or failed API
                key attempts allowed per minute from this IP address.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error_validation_error'
              example:
                error:
                  code: validation_error
                  message: >-
                    The request is invalid. details lists up to 20 field errors.
                    Request bodies are limited to 2 MiB.
                  request_id: req_example
        '401':
          description: The bearer token is missing or invalid.
          headers:
            X-Request-Id:
              schema:
                type: string
              required: true
              description: >-
                Request ID, also included in error bodies. Include it when
                contacting support.
            Cache-Control:
              schema:
                type: string
                enum:
                  - private, no-store
                  - private, no-store, no-transform
              required: false
              description: API responses are private and must not be cached.
            X-RateLimit-Limit:
              schema:
                type: string
                example: '500'
              required: false
              description: >-
                Requests allowed per minute for this credential, or failed API
                key attempts allowed per minute from this IP address.
            WWW-Authenticate:
              schema:
                type: string
              required: false
              description: Bearer authentication challenge, when supplied.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error_invalid_token'
              example:
                error:
                  code: invalid_token
                  message: The bearer token is missing or invalid.
                  request_id: req_example
        '403':
          description: >-
            Access denied. The error code says why: forbidden, token_disabled,
            organization_required, insufficient_role or mfa_required.
          headers:
            X-Request-Id:
              schema:
                type: string
              required: true
              description: >-
                Request ID, also included in error bodies. Include it when
                contacting support.
            Cache-Control:
              schema:
                type: string
                enum:
                  - private, no-store
                  - private, no-store, no-transform
              required: false
              description: API responses are private and must not be cached.
            X-RateLimit-Limit:
              schema:
                type: string
                example: '500'
              required: false
              description: >-
                Requests allowed per minute for this credential, or failed API
                key attempts allowed per minute from this IP address.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Error_forbidden_token_disabled_organization_required_insufficient_role_mfa_required
              example:
                error:
                  code: forbidden
                  message: >-
                    Access denied. The error code says why: forbidden,
                    token_disabled, organization_required, insufficient_role or
                    mfa_required.
                  request_id: req_example
        '404':
          description: The resource does not exist in the current organization.
          headers:
            X-Request-Id:
              schema:
                type: string
              required: true
              description: >-
                Request ID, also included in error bodies. Include it when
                contacting support.
            Cache-Control:
              schema:
                type: string
                enum:
                  - private, no-store
                  - private, no-store, no-transform
              required: false
              description: API responses are private and must not be cached.
            X-RateLimit-Limit:
              schema:
                type: string
                example: '500'
              required: false
              description: >-
                Requests allowed per minute for this credential, or failed API
                key attempts allowed per minute from this IP address.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error_not_found'
              example:
                error:
                  code: not_found
                  message: The resource does not exist in the current organization.
                  request_id: req_example
        '409':
          description: >-
            Agreement work is in progress, an active agreement is missing a
            required field, the source document is unavailable, or the
            Idempotency-Key was reused with a different request.
          headers:
            X-Request-Id:
              schema:
                type: string
              required: true
              description: >-
                Request ID, also included in error bodies. Include it when
                contacting support.
            Cache-Control:
              schema:
                type: string
                enum:
                  - private, no-store
                  - private, no-store, no-transform
              required: false
              description: API responses are private and must not be cached.
            X-RateLimit-Limit:
              schema:
                type: string
                example: '500'
              required: false
              description: >-
                Requests allowed per minute for this credential, or failed API
                key attempts allowed per minute from this IP address.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error_conflict_source_unavailable'
              example:
                error:
                  code: conflict
                  message: >-
                    Agreement work is in progress, an active agreement is
                    missing a required field, the source document is
                    unavailable, or the Idempotency-Key was reused with a
                    different request.
                  request_id: req_example
        '429':
          description: Too many requests. Wait for the Retry-After delay before retrying.
          headers:
            X-Request-Id:
              schema:
                type: string
              required: true
              description: >-
                Request ID, also included in error bodies. Include it when
                contacting support.
            Cache-Control:
              schema:
                type: string
                enum:
                  - private, no-store
                  - private, no-store, no-transform
              required: false
              description: API responses are private and must not be cached.
            X-RateLimit-Limit:
              schema:
                type: string
                example: '500'
              required: false
              description: >-
                Requests allowed per minute for this credential, or failed API
                key attempts allowed per minute from this IP address.
            Retry-After:
              schema:
                type: string
                example: '60'
              required: true
              description: Seconds to wait before retrying the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error_rate_limit_exceeded'
              example:
                error:
                  code: rate_limit_exceeded
                  message: >-
                    Too many requests. Wait for the Retry-After delay before
                    retrying.
                  request_id: req_example
        '500':
          description: >-
            Unexpected server failure. Include the request ID when contacting
            support.
          headers:
            X-Request-Id:
              schema:
                type: string
              required: true
              description: >-
                Request ID, also included in error bodies. Include it when
                contacting support.
            Cache-Control:
              schema:
                type: string
                enum:
                  - private, no-store
                  - private, no-store, no-transform
              required: false
              description: API responses are private and must not be cached.
            X-RateLimit-Limit:
              schema:
                type: string
                example: '500'
              required: false
              description: >-
                Requests allowed per minute for this credential, or failed API
                key attempts allowed per minute from this IP address.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error_internal_error'
              example:
                error:
                  code: internal_error
                  message: >-
                    Unexpected server failure. Include the request ID when
                    contacting support.
                  request_id: req_example
        '503':
          description: >-
            Temporarily unavailable. Retry after the Retry-After delay, when
            provided.
          headers:
            X-Request-Id:
              schema:
                type: string
              required: true
              description: >-
                Request ID, also included in error bodies. Include it when
                contacting support.
            Cache-Control:
              schema:
                type: string
                enum:
                  - private, no-store
                  - private, no-store, no-transform
              required: false
              description: API responses are private and must not be cached.
            X-RateLimit-Limit:
              schema:
                type: string
                example: '500'
              required: false
              description: >-
                Requests allowed per minute for this credential, or failed API
                key attempts allowed per minute from this IP address.
            Retry-After:
              schema:
                type: string
                example: '60'
              required: true
              description: Seconds to wait before retrying the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error_service_unavailable'
              example:
                error:
                  code: service_unavailable
                  message: >-
                    Temporarily unavailable. Retry after the Retry-After delay,
                    when provided.
                  request_id: req_example
      security:
        - ApiKeyBearer: []
components:
  schemas:
    Agreement:
      allOf:
        - $ref: '#/components/schemas/AgreementSummary'
        - type: object
          properties:
            relationships:
              type: object
              properties:
                price_item_count:
                  type: integer
                  minimum: 0
                document_count:
                  type: integer
                  minimum: 0
                invoice_match_count:
                  type: integer
                  minimum: 0
                  description: Invoices currently matched to this agreement.
                supplier_invoice_count:
                  type: integer
                  minimum: 0
                  description: >-
                    Invoices from this agreement's suppliers, before other
                    matching conditions apply.
                eligible_invoice_count:
                  type:
                    - integer
                    - 'null'
                  minimum: 0
                  description: >-
                    For a draft, the invoices its saved suppliers, recipients,
                    term and applicability admit: what matching links once it is
                    activated. With smart matching enabled, a maximum. Null
                    unless the agreement is a draft.
              required:
                - price_item_count
                - document_count
                - invoice_match_count
                - supplier_invoice_count
                - eligible_invoice_count
            applicability:
              type:
                - object
                - 'null'
              properties:
                match:
                  type: string
                  enum:
                    - all
                    - any
                conditions:
                  type: array
                  items:
                    oneOf:
                      - type: object
                        properties:
                          field:
                            type: string
                            enum:
                              - all_references
                              - order_references
                              - buyer_reference
                              - seller_reference
                              - contract_reference
                              - project_reference
                              - accounting_cost
                              - delivery_address
                              - delivery_name
                              - delivery_street
                              - delivery_postal_code
                              - delivery_city
                              - delivery_state
                              - delivery_country
                          operator:
                            type: string
                            enum:
                              - contains
                          values:
                            type: array
                            items:
                              type: string
                        required:
                          - field
                          - operator
                          - values
                        additionalProperties: false
                      - type: object
                        properties:
                          field:
                            type: string
                            enum:
                              - all_references
                              - order_references
                              - buyer_reference
                              - seller_reference
                              - contract_reference
                              - project_reference
                              - accounting_cost
                              - delivery_address
                              - delivery_name
                              - delivery_street
                              - delivery_postal_code
                              - delivery_city
                              - delivery_state
                              - delivery_country
                          operator:
                            type: string
                            enum:
                              - not_contains
                          values:
                            type: array
                            items:
                              type: string
                        required:
                          - field
                          - operator
                          - values
                        additionalProperties: false
                      - type: object
                        properties:
                          field:
                            type: string
                            enum:
                              - all_references
                              - order_references
                              - buyer_reference
                              - seller_reference
                              - contract_reference
                              - project_reference
                              - accounting_cost
                              - delivery_address
                              - delivery_name
                              - delivery_street
                              - delivery_postal_code
                              - delivery_city
                              - delivery_state
                              - delivery_country
                          operator:
                            type: string
                            enum:
                              - in
                          values:
                            type: array
                            items:
                              type: string
                        required:
                          - field
                          - operator
                          - values
                        additionalProperties: false
                      - type: object
                        properties:
                          field:
                            type: string
                            enum:
                              - all_references
                              - order_references
                              - buyer_reference
                              - seller_reference
                              - contract_reference
                              - project_reference
                              - accounting_cost
                              - delivery_address
                              - delivery_name
                              - delivery_street
                              - delivery_postal_code
                              - delivery_city
                              - delivery_state
                              - delivery_country
                          operator:
                            type: string
                            enum:
                              - not_in
                          values:
                            type: array
                            items:
                              type: string
                        required:
                          - field
                          - operator
                          - values
                        additionalProperties: false
                      - type: object
                        properties:
                          field:
                            type: string
                            enum:
                              - all_references
                              - order_references
                              - buyer_reference
                              - seller_reference
                              - contract_reference
                              - project_reference
                              - accounting_cost
                              - delivery_address
                              - delivery_name
                              - delivery_street
                              - delivery_postal_code
                              - delivery_city
                              - delivery_state
                              - delivery_country
                          operator:
                            type: string
                            enum:
                              - is_empty
                        required:
                          - field
                          - operator
                        additionalProperties: false
                      - type: object
                        properties:
                          field:
                            type: string
                            enum:
                              - all_references
                              - order_references
                              - buyer_reference
                              - seller_reference
                              - contract_reference
                              - project_reference
                              - accounting_cost
                              - delivery_address
                              - delivery_name
                              - delivery_street
                              - delivery_postal_code
                              - delivery_city
                              - delivery_state
                              - delivery_country
                          operator:
                            type: string
                            enum:
                              - is_not_empty
                        required:
                          - field
                          - operator
                        additionalProperties: false
                  minItems: 1
              required:
                - match
                - conditions
              additionalProperties: false
              description: >-
                Extra invoice-matching conditions on reference and delivery
                fields. Null means none.
            renewal:
              type:
                - object
                - 'null'
              properties:
                mode:
                  type:
                    - string
                    - 'null'
                  enum:
                    - none
                    - optional
                    - automatic
                    - null
                  default: null
                period:
                  type:
                    - object
                    - 'null'
                  properties:
                    value:
                      type: integer
                      exclusiveMinimum: 0
                      maximum: 2147483647
                    unit:
                      type: string
                      enum:
                        - days
                        - weeks
                        - months
                        - years
                  default: null
                  required:
                    - value
                    - unit
                  additionalProperties: false
                occurrences_remaining:
                  type:
                    - integer
                    - 'null'
                  minimum: 0
                  maximum: 2147483647
                  default: null
                notice_period:
                  type:
                    - object
                    - 'null'
                  properties:
                    value:
                      type: integer
                      exclusiveMinimum: 0
                      maximum: 2147483647
                    unit:
                      type: string
                      enum:
                        - days
                        - weeks
                        - months
                        - years
                  default: null
                  required:
                    - value
                    - unit
                  additionalProperties: false
                deadline_override:
                  type:
                    - string
                    - 'null'
                  pattern: ^\d{4}-\d{2}-\d{2}$
                  default: null
              additionalProperties: false
            instructions:
              type:
                - string
                - 'null'
              description: Extra context for compliance checks of this agreement.
            alert_settings:
              type: object
              properties:
                flag_undercharges:
                  type: boolean
                  default: false
                flag_uncovered_items:
                  type: boolean
                  default: false
              additionalProperties: false
              description: >-
                Which extra alerts to raise for this agreement. Replaces the
                whole object; omitted flags are false.
            matching_settings:
              type: object
              properties:
                smart_matching_enabled:
                  type: boolean
                  default: false
                smart_matching_criterion:
                  type:
                    - string
                    - 'null'
                  minLength: 1
                  maxLength: 1000
                  default: null
              additionalProperties: false
              description: >-
                Smart matching settings. Replaces the whole object; omitted
                values are false or null.
            created_by_name:
              type:
                - string
                - 'null'
            created_by_deleted:
              type: boolean
              description: >-
                The account that created the agreement was deleted.
                created_by_name keeps their name, or is null once the account is
                anonymised.
            suggested_entities:
              type: object
              properties:
                supplier:
                  type: object
                  properties:
                    name:
                      type:
                        - string
                        - 'null'
                    org_number:
                      type:
                        - string
                        - 'null'
                    candidates:
                      type: array
                      items:
                        type: object
                        properties:
                          id:
                            type: string
                            format: uuid
                          name:
                            type: string
                          organization_number:
                            type:
                              - string
                              - 'null'
                        required:
                          - id
                          - name
                          - organization_number
                      maxItems: 3
                      description: >-
                        Existing suppliers the suggested name likely refers to,
                        best first. Empty when nothing matches or the agreement
                        already has a supplier.
                  required:
                    - name
                    - org_number
                    - candidates
                recipient:
                  type: object
                  properties:
                    name:
                      type:
                        - string
                        - 'null'
                    org_number:
                      type:
                        - string
                        - 'null'
                  required:
                    - name
                    - org_number
              required:
                - supplier
                - recipient
          required:
            - applicability
            - renewal
            - instructions
            - alert_settings
            - matching_settings
            - created_by_name
            - created_by_deleted
            - suggested_entities
    Error_validation_error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - validation_error
            message:
              type: string
            request_id:
              type: string
            description:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  code:
                    type: string
                  field:
                    type: string
                  message:
                    type: string
                required:
                  - code
                  - field
                  - message
              maxItems: 20
            workflow_run_id:
              type: string
              format: uuid
            import_id:
              type: string
              format: uuid
            existing_party:
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - supplier
                    - recipient
                id:
                  type: string
                  format: uuid
              required:
                - type
                - id
          required:
            - code
            - message
            - request_id
      required:
        - error
    Error_invalid_token:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - invalid_token
            message:
              type: string
            request_id:
              type: string
            description:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  code:
                    type: string
                  field:
                    type: string
                  message:
                    type: string
                required:
                  - code
                  - field
                  - message
              maxItems: 20
            workflow_run_id:
              type: string
              format: uuid
            import_id:
              type: string
              format: uuid
            existing_party:
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - supplier
                    - recipient
                id:
                  type: string
                  format: uuid
              required:
                - type
                - id
          required:
            - code
            - message
            - request_id
      required:
        - error
    Error_forbidden_token_disabled_organization_required_insufficient_role_mfa_required:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - forbidden
                - token_disabled
                - organization_required
                - insufficient_role
                - mfa_required
            message:
              type: string
            request_id:
              type: string
            description:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  code:
                    type: string
                  field:
                    type: string
                  message:
                    type: string
                required:
                  - code
                  - field
                  - message
              maxItems: 20
            workflow_run_id:
              type: string
              format: uuid
            import_id:
              type: string
              format: uuid
            existing_party:
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - supplier
                    - recipient
                id:
                  type: string
                  format: uuid
              required:
                - type
                - id
          required:
            - code
            - message
            - request_id
      required:
        - error
    Error_not_found:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - not_found
            message:
              type: string
            request_id:
              type: string
            description:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  code:
                    type: string
                  field:
                    type: string
                  message:
                    type: string
                required:
                  - code
                  - field
                  - message
              maxItems: 20
            workflow_run_id:
              type: string
              format: uuid
            import_id:
              type: string
              format: uuid
            existing_party:
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - supplier
                    - recipient
                id:
                  type: string
                  format: uuid
              required:
                - type
                - id
          required:
            - code
            - message
            - request_id
      required:
        - error
    Error_conflict_source_unavailable:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - conflict
                - source_unavailable
            message:
              type: string
            request_id:
              type: string
            description:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  code:
                    type: string
                  field:
                    type: string
                  message:
                    type: string
                required:
                  - code
                  - field
                  - message
              maxItems: 20
            workflow_run_id:
              type: string
              format: uuid
            import_id:
              type: string
              format: uuid
            existing_party:
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - supplier
                    - recipient
                id:
                  type: string
                  format: uuid
              required:
                - type
                - id
          required:
            - code
            - message
            - request_id
      required:
        - error
    Error_rate_limit_exceeded:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - rate_limit_exceeded
            message:
              type: string
            request_id:
              type: string
            description:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  code:
                    type: string
                  field:
                    type: string
                  message:
                    type: string
                required:
                  - code
                  - field
                  - message
              maxItems: 20
            workflow_run_id:
              type: string
              format: uuid
            import_id:
              type: string
              format: uuid
            existing_party:
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - supplier
                    - recipient
                id:
                  type: string
                  format: uuid
              required:
                - type
                - id
          required:
            - code
            - message
            - request_id
      required:
        - error
    Error_internal_error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - internal_error
            message:
              type: string
            request_id:
              type: string
            description:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  code:
                    type: string
                  field:
                    type: string
                  message:
                    type: string
                required:
                  - code
                  - field
                  - message
              maxItems: 20
            workflow_run_id:
              type: string
              format: uuid
            import_id:
              type: string
              format: uuid
            existing_party:
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - supplier
                    - recipient
                id:
                  type: string
                  format: uuid
              required:
                - type
                - id
          required:
            - code
            - message
            - request_id
      required:
        - error
    Error_service_unavailable:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - service_unavailable
            message:
              type: string
            request_id:
              type: string
            description:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  code:
                    type: string
                  field:
                    type: string
                  message:
                    type: string
                required:
                  - code
                  - field
                  - message
              maxItems: 20
            workflow_run_id:
              type: string
              format: uuid
            import_id:
              type: string
              format: uuid
            existing_party:
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - supplier
                    - recipient
                id:
                  type: string
                  format: uuid
              required:
                - type
                - id
          required:
            - code
            - message
            - request_id
      required:
        - error
    AgreementSummary:
      type: object
      properties:
        id:
          type: string
          format: uuid
        title:
          type:
            - string
            - 'null'
        status:
          type: string
          enum:
            - draft
            - active
            - archived
          description: >-
            draft (being set up), active (Watchdog checks invoices against it)
            or archived (no longer checked). It does not say whether the
            contract term is in force: use expiration_date, renewal_action or
            the valid_on filter for that.
        effective_date:
          type:
            - string
            - 'null'
          pattern: ^\d{4}-\d{2}-\d{2}$
        expiration_date:
          type:
            - string
            - 'null'
          pattern: ^\d{4}-\d{2}-\d{2}$
        suppliers:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
              name:
                type: string
              organization_number:
                type:
                  - string
                  - 'null'
            required:
              - id
              - name
              - organization_number
          example: []
          description: Suppliers the agreement covers. An empty array matches no invoices.
        recipients:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
              name:
                type: string
              organization_number:
                type:
                  - string
                  - 'null'
            required:
              - id
              - name
              - organization_number
          example: []
          description: Recipients the agreement covers. An empty array means any recipient.
        tags:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
              name:
                type: string
            required:
              - id
              - name
          description: Assigned tags.
          example: []
        projects:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
              name:
                type: string
              project_numbers:
                type: array
                items:
                  type: string
            required:
              - id
              - name
              - project_numbers
        owner_user_id:
          type:
            - string
            - 'null'
          minLength: 1
          maxLength: 200
          pattern: ^[A-Za-z0-9_-]+$
        owner:
          type:
            - object
            - 'null'
          properties:
            user_id:
              type: string
              minLength: 1
              maxLength: 200
              pattern: ^[A-Za-z0-9_-]+$
            first_name:
              type:
                - string
                - 'null'
            last_name:
              type:
                - string
                - 'null'
            email:
              type:
                - string
                - 'null'
          required:
            - user_id
            - first_name
            - last_name
            - email
        readiness:
          type: object
          properties:
            ready:
              type: boolean
            reasons:
              type: array
              items:
                type: string
                enum:
                  - inactive
                  - missing_title
                  - missing_supplier
                  - missing_content
                  - documents_not_ready
          required:
            - ready
            - reasons
          description: >-
            Whether the agreement can be checked. reasons lists what is missing
            when ready is false.
        renewal_action:
          oneOf:
            - type: object
              properties:
                kind:
                  type: string
                  enum:
                    - cancel_by
                deadline:
                  type: string
                  pattern: ^\d{4}-\d{2}-\d{2}$
              required:
                - kind
                - deadline
            - type: object
              properties:
                kind:
                  type: string
                  enum:
                    - renew_by
                deadline:
                  type: string
                  pattern: ^\d{4}-\d{2}-\d{2}$
              required:
                - kind
                - deadline
            - type: object
              properties:
                kind:
                  type: string
                  enum:
                    - automatic_notice
                deadline:
                  type: 'null'
                notice:
                  type: object
                  properties:
                    value:
                      type: integer
                    unit:
                      type: string
                      enum:
                        - days
                        - weeks
                        - months
                        - years
                  required:
                    - value
                    - unit
              required:
                - kind
                - deadline
                - notice
            - type: object
              properties:
                kind:
                  type: string
                  enum:
                    - missing_details
                deadline:
                  type: 'null'
              required:
                - kind
                - deadline
            - type: object
              properties:
                kind:
                  type: string
                  enum:
                    - none
                deadline:
                  type: 'null'
              required:
                - kind
                - deadline
          description: >-
            The next renewal action from the renewal terms. A null deadline
            means no dated action is known.
        version:
          type: integer
          minimum: 0
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        alert_summary:
          type: object
          properties:
            counts:
              type: object
              properties:
                pending:
                  type: object
                  properties:
                    credited:
                      type: integer
                      minimum: 0
                    uncredited:
                      type: integer
                      minimum: 0
                  required:
                    - credited
                    - uncredited
                accepted:
                  type: object
                  properties:
                    credited:
                      type: integer
                      minimum: 0
                    uncredited:
                      type: integer
                      minimum: 0
                  required:
                    - credited
                    - uncredited
                dismissed:
                  type: object
                  properties:
                    credited:
                      type: integer
                      minimum: 0
                    uncredited:
                      type: integer
                      minimum: 0
                  required:
                    - credited
                    - uncredited
              required:
                - pending
                - accepted
                - dismissed
              description: >-
                Alerts by verdict, each split into credited and uncredited
                alerts.
            pending_topic_count:
              type: integer
              minimum: 0
              description: >-
                Topics with at least one pending, uncredited alert.
                Uncategorized alerts count as one topic.
            organization_currency:
              type: object
              properties:
                currency_code:
                  type: string
                  description: The organization's reporting currency from its settings.
                impact_amount:
                  type: string
                  pattern: ^-?\d+(?:\.\d+)?$
                by_verdict:
                  type: object
                  properties:
                    pending:
                      type: object
                      properties:
                        credited:
                          type: object
                          properties:
                            alert_count:
                              type: integer
                            impact_amount:
                              type: string
                              pattern: ^-?\d+(?:\.\d+)?$
                              description: >-
                                Sum of the alerts’ impacts; alerts without an
                                impact add nothing.
                          required:
                            - alert_count
                            - impact_amount
                        uncredited:
                          type: object
                          properties:
                            alert_count:
                              type: integer
                            impact_amount:
                              type: string
                              pattern: ^-?\d+(?:\.\d+)?$
                              description: >-
                                Sum of the alerts’ impacts; alerts without an
                                impact add nothing.
                          required:
                            - alert_count
                            - impact_amount
                      required:
                        - credited
                        - uncredited
                    accepted:
                      type: object
                      properties:
                        credited:
                          type: object
                          properties:
                            alert_count:
                              type: integer
                            impact_amount:
                              type: string
                              pattern: ^-?\d+(?:\.\d+)?$
                              description: >-
                                Sum of the alerts’ impacts; alerts without an
                                impact add nothing.
                          required:
                            - alert_count
                            - impact_amount
                        uncredited:
                          type: object
                          properties:
                            alert_count:
                              type: integer
                            impact_amount:
                              type: string
                              pattern: ^-?\d+(?:\.\d+)?$
                              description: >-
                                Sum of the alerts’ impacts; alerts without an
                                impact add nothing.
                          required:
                            - alert_count
                            - impact_amount
                      required:
                        - credited
                        - uncredited
                    dismissed:
                      type: object
                      properties:
                        credited:
                          type: object
                          properties:
                            alert_count:
                              type: integer
                            impact_amount:
                              type: string
                              pattern: ^-?\d+(?:\.\d+)?$
                              description: >-
                                Sum of the alerts’ impacts; alerts without an
                                impact add nothing.
                          required:
                            - alert_count
                            - impact_amount
                        uncredited:
                          type: object
                          properties:
                            alert_count:
                              type: integer
                            impact_amount:
                              type: string
                              pattern: ^-?\d+(?:\.\d+)?$
                              description: >-
                                Sum of the alerts’ impacts; alerts without an
                                impact add nothing.
                          required:
                            - alert_count
                            - impact_amount
                      required:
                        - credited
                        - uncredited
                  required:
                    - pending
                    - accepted
                    - dismissed
                  description: >-
                    Counts and impact by verdict, each split into credited and
                    uncredited alerts.
              required:
                - currency_code
                - impact_amount
                - by_verdict
              description: >-
                Impact in the organization currency: the sum of the alerts’
                converted impacts.
          required:
            - counts
            - pending_topic_count
            - organization_currency
          description: >-
            All alerts of this agreement, as GET
            /v1/alerts/metrics?agreement_ids={id} reports them.
        relationships:
          type: object
          properties:
            price_item_count:
              type: integer
              minimum: 0
            document_count:
              type: integer
              minimum: 0
            invoice_match_count:
              type: integer
              minimum: 0
              description: Invoices currently matched to this agreement.
            supplier_invoice_count:
              type: integer
              minimum: 0
              description: >-
                Invoices from this agreement's suppliers, before other matching
                conditions apply.
          required:
            - price_item_count
            - document_count
            - invoice_match_count
            - supplier_invoice_count
      required:
        - id
        - title
        - status
        - effective_date
        - expiration_date
        - suppliers
        - recipients
        - tags
        - projects
        - owner_user_id
        - owner
        - readiness
        - renewal_action
        - version
        - created_at
        - updated_at
        - alert_summary
        - relationships
  securitySchemes:
    ApiKeyBearer:
      type: http
      scheme: bearer
      description: >-
        Personal API key sent as a bearer token, together with
        X-Organization-Id. The key must have at least the access level the
        endpoint requires (read, write or admin).

````

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