swagger: '2.0'
info:
  description: FaaS API documentation
  version: 0.6.5
  title: FaaS API Gateway
  license:
    name: MIT
basePath: /
schemes:
  - http
paths:
  /system/functions:
    get:
      summary: 'Get a list of deployed functions with: stats and image digest'
      description: ''
      consumes:
        - application/json
      produces:
        - application/json
      responses:
        '200':
          description: List of deployed functions.
          examples:
            application/json: |-
              [
                {"name":"func_payroll","image":"alexellis2/faas-payroll:latest@sha256:0bc2773613c76d9ee4906bf3887ea2527f135cb7a0d0f430743e7c6712949709","invocationCount":16,"replicas":1},
                {"name":"func_fanclub","image":"alexellis2/fanclub:18-04-2017@sha256:37bb3fabee7e36abab7e6250bb7d13c9ab66e983782b35200470fe2a3aa14daa","invocationCount":1125,"replicas":1}
              ]
    post:
      summary: Deploy a new function.
      description: ''
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          description: Function to deploy
          required: true
          schema:
            $ref: '#/definitions/CreateFunctionRequest'
      responses:
        '200':
          description: OK
    put:
      summary: Update a function.
      description: ''
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          description: Function to update
          required: true
          schema:
            $ref: '#/definitions/CreateFunctionRequest'
      responses:
        '200':
          description: OK
    delete:
      summary: Remove a deployed function.
      description: ''
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          description: Function to delete
          required: true
          schema:
            $ref: '#/definitions/DeleteFunctionRequest'
      responses:
        '200':
          description: OK
        '404':
          description: Function not found in gateway
  /system/alert:
    post:
      summary: 'Event-sink for AlertManager, for auto-scaling'
      description: 'Internal use for AlertManager, requires valid AlertManager alert JSON'
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          description: Function to delete
          schema:
            type: object
            example: |-
              {"receiver": "scale-up",
                "status": "firing",
                "alerts": [{
                    "status": "firing",
                    "labels": {
                        "alertname": "APIHighInvocationRate",
                        "code": "200",
                        "function_name": "func_nodeinfo",
                        "instance": "gateway:8080",
                        "job": "gateway",
                        "monitor": "faas-monitor",
                        "service": "gateway",
                        "severity": "major",
                        "value": "8.998200359928017"
                    },
                    "annotations": {
                        "description": "High invocation total on gateway:8080",
                        "summary": "High invocation total on gateway:8080"
                    },
                    "startsAt": "2017-03-15T15:52:57.805Z",
                    "endsAt": "0001-01-01T00:00:00Z",
                    "generatorURL": "http://4156cb797423:9090/graph?g0.expr=rate%28gateway_function_invocation_total%5B10s%5D%29+%3E+5\u0026g0.tab=0"
                }],
                "groupLabels": {
                    "alertname": "APIHighInvocationRate",
                    "service": "gateway"
                },
                "commonLabels": {
                    "alertname": "APIHighInvocationRate",
                    "code": "200",
                    "function_name": "func_nodeinfo",
                    "instance": "gateway:8080",
                    "job": "gateway",
                    "monitor": "faas-monitor",
                    "service": "gateway",
                    "severity": "major",
                    "value": "8.998200359928017"
                },
                "commonAnnotations": {
                    "description": "High invocation total on gateway:8080",
                    "summary": "High invocation total on gateway:8080"
                },
                "externalURL": "http://f054879d97db:9093",
                "version": "3",
                "groupKey": 18195285354214864953
              }
      responses:
        '200':
          description: Alert handled successfully
        '500':
          description: Internal error with swarm or request JSON invalid
  '/async-function/{functionName}':
    post:
      summary: 'Invoke a function asynchronously in OpenFaaS'
      description: >-
        ### This endpoint requires the asynchronous stack.
        See https://github.com/openfaas/faas/blob/master/guide/asynchronous.md.
      parameters:
        - in: path
          name: functionName
          description: Function name
          type: string
          required: true
        - in: body
          name: input
          description: (Optional) data to pass to function
          schema:
            type: string
            format: binary
            example:
              '{"hello": "world"}'
          required: false
      responses:
        '202':
          description: Request accepted and queued
        '404':
          description: Requested function not found
        '500':
          description: Internal server error
  '/function/{functionName}':
    post:
      summary: Invoke a function defined in OpenFaaS
      parameters:
        - in: path
          name: functionName
          description: Function name
          type: string
          required: true
        - in: body
          name: input
          description: (Optional) data to pass to function
          schema:
            type: string
            format: binary
            example:
              '{"hello": "world"}'
          required: false
      responses:
        '200':
          description: Value returned from function
        '404':
          description: Function not found
        '500':
          description: Error connecting to function
definitions:
  DeleteFunctionRequest:
    type: object
    properties:
      functionName:
        type: string
        description: Name of deployed function
  CreateFunctionRequest:
    type: object
    properties:
      service:
        type: string
        description: Name of deployed function
      network:
        type: string
        description: 'Docker swarm network, usually func_functions'
      image:
        type: string
        description: Docker image in accessible registry
      envProcess:
        type: string
        description: Process for watchdog to fork
      envVars:
        type: array
        items:
          type: string
        description: Overrides to environmental variables
      secrets:
        type: array
        items:
          type: string
      registryAuth:
        type: string
        description: >-
          Private registry base64-encoded basic auth (as present in
          ~/.docker/config.json)
externalDocs:
  description: More documentation available on Github
  url: 'https://github.com/openfaas/faas'
