Skip to content

Latest commit

 

History

History
1297 lines (1006 loc) · 31.4 KB

admin.md

File metadata and controls

1297 lines (1006 loc) · 31.4 KB

Table of contents

Admin

Introduction

An admin API is available on the stack. It offers several endpoints to interact with your cozy-stack installation (E.g. interacting with instances, generating tokens, ...).

⚠️ Use the admin API only if you know what you are doing. The admin API provides a basic authentication, you must protect these endpoints as they are very powerful.

The default port for the admin endpoints is 6060. If you want to customize the parameters, please see the config file documentation page.

Instance

GET /instances

Returns the list of all instances. By default, there is no pagination, but it is possible to add a page[limit] parameter in the query-string to paginate ( cf JSON-API pagination). A page[skip] parameter in the query-string is also supported, but CouchDB may be slow on requests with a skip on large collections.

Request

GET /instances HTTP/1.1

Response

HTTP/1.1 200 OK
Content-Type: application/vnd.api+json
{
    "data": [
        {
            "type": "instances",
            "id": "3af6ed68a6d9146b3529d2584a001d98",
            "attributes": {
                "domain": "alice.cozy.localhost:8080",
                "prefix": "cozy7d3d5947e7f3b0c674d1b8644646348e",
                "locale": "fr",
                "context": "dev",
                "onboarding_finished": true,
                "indexes_version": 30
            },
            "meta": {
                "rev": "1-32c855c989e8f6def0bc0cc417d8b3b4"
            },
            "links": {
                "self": "/instances/3af6ed68a6d9146b3529d2584a001d98"
            }
        },
        {
            "type": "instances",
            "id": "3af6ed68a6d9146b3529d2584a01d557",
            "attributes": {
                "domain": "bob.cozy.localhost:8080",
                "prefix": "cozybf682065ca3c7d64f2dafc6cc12fe702",
                "locale": "fr",
                "context": "dev",
                "onboarding_finished": true,
                "indexes_version": 30
            },
            "meta": {
                "rev": "1-ab6f77dbfdb3aab5b70b022e37fe231f"
            },
            "links": {
                "self": "/instances/3af6ed68a6d9146b3529d2584a01d557"
            }
        }
    ],
    "meta": {
        "count": 2
    }
}

GET /instances/count

Returns the count of all instances.

Request

GET /instances/count HTTP/1.1

Response

HTTP/1.1 200 OK
Content-Type: application/json
{"count":259}

GET /instances/:domain/last-activity

It returns an approximate date of when the instance was last used by their owner (automatic jobs like connectors don't count). It looks at the sessions and OAuth tokens.

Request

GET /instances/john.mycozy.cloud/last-activity HTTP/1.1

Response

HTTP/1.1 200 OK
Content-Type: application/json
{
  "last-activity": "2022-12-31"
}

PATCH /instances/:domain

This route can be used to change an instance (email, locale, disk quota, ToS, etc.)

Note a special parameter FromCloudery=true in the query string can be used to tell the stack to not call the cloudery if the email or public name has changed, since the change is already coming from the cloudery.

Request

PATCH /instances/[email protected]&FromCloudery=true HTTP/1.1

Response

HTTP/1.1 200 OK
{
  "data": {
    "type": "instances",
    "id": "0dc76ad9b1cf3a979b916b3155001830",
    "attributes": {
      "domain": "john.mycozy.cloud",
      "prefix": "cozy1a4e1aabf424a194d7daf946d7b1337d",
      "locale": "fr",
      "context": "cozy",
      "onboarding_finished": true,
      "indexes_version": 31,
      "passphrase_hash": "c2NyeXB0JDMyNzY4JDgkMSQyYjMzMTU1YTY5OTdjYzM2ZjQyYjk1MWM0MWU4ZWVkYSRlODA4NTY2ODQ5OTdkOWNmNzc1ZGEzMjdlYWMwOTgyNTMwMTM3NTJjYTMxMTdhYTIyYTIxODI0NzBmODhjYjdl",
      "session_secret": "eyG2l+G1xO38WyD1GfqYkgSU/T4rnti+JzOwj6haHpM8PSMvzkGu/CSH0mpXUuuCNVbjEXc+hRwGMJ8lTKqs+w==",
      "oauth_secret": "tnr6V8jDK27CDVpzNiOOAJZs+5wrvGyNyJxIc/BJ6O87i2eJX4LCzblDFyDbVv/B7qV7HA9/Fc+Agon2gHQg8x0E0zzfGizbFeWt+KPk7UrZNd4sZJ81oWNNd9BrJ2+eKXDmZeYBI0AwUSykyr7iOIpB5jXaIvfOQvH7EYwtKLg=",
      "cli_secret": "dcLa1VqcoI4eNE7nBrFzhJ9w6rRLlAMESl3PAEqr+IDE29OeN3uyhzLhxPlk0b9rkc0yvozQc/AFttZxyqH/DDYa6rrJyrf91gddtwSfka1pJVss+/DiFaghyWJzEbffBs78X3swA2gSJNu0eGDKdFVY7q8iLT4JpfXy+GPzdLk="
    },
    "meta": {
      "rev": "1-1c4efe4196191469a65b2a3e0898db61"
    },
    "links": {
      "self": "/instances/0dc76ad9b1cf3a979b916b3155001830"
    }
  }
}

GET /instances/with-app-version/:slug/:version

Returns all the instances using slug/version pair

Request

GET /instances/with-app-version/drive/1.0.0 HTTP/1.1

Response

HTTP/1.1 200 OK
Content-Type: application/json
{
    "instances": [
        "alice.cozy.localhost",
        "bob.cozy.localhost",
        "zoe.cozy.localhost"
    ]
}

POST /instances/:domain/magic_link

Creates a code that can be used in a magic link (if this feature is enabled on the Cozy).

Request

POST /instances/alice.cozy.localhost/magic_link HTTP/1.1

Response

HTTP/1.1 200 OK
Content-Type: application/json
{
  "code": "YmU5NmEzMzAtYjZiYy0wMTNiLTE1YzUtMThjMDRkYWJhMzI2"
}

POST /instances/:domain/session_code

Creates a session_code that can be used to login on the given instance.

Request

POST /instances/alice.cozy.localhost/session_code HTTP/1.1

Response

HTTP/1.1 200 OK
Content-Type: application/json
{
  "session_code": "L7oJ6BDQtdbLR5Vr5vTxTXLJ1pQzMXcD"
}

POST /instances/:domain/session_code/check

Checks that a session_code is valid for the given instance. Note that the session_code will be invalidated after that.

Request

POST /instances/alice.cozy.localhost/session_code/check HTTP/1.1
Content-Type: application/json
{
  "session_code": "L7oJ6BDQtdbLR5Vr5vTxTXLJ1pQzMXcD"
}

Response

HTTP/1.1 200 OK
Content-Type: application/json
{
  "valid": true
}

POST /instances/:domain/email_verified_code

Creates an email_verified_code that can be used on the given instance to avoid the 2FA by email.

Request

POST /instances/alice.cozy.localhost/email_verified_code HTTP/1.1

Response

HTTP/1.1 200 OK
Content-Type: application/json
{
  "email_verified_code": "jBPF5Kvpv1oztdaSgdA2315hVpAf6BCd"
}

Note: if the two factor authentication by email is not enabled on this instance, it will return a 400 Bad Request error.

DELETE /instances/:domain/sessions

Delete the databases for io.cozy.sessions and io.cozy.sessions.logins.

Request

DELETE /instances/alice.cozy.localhost/sessions HTTP/1.1

Response

HTTP/1.1 204 No Content

POST /instances/:domain/fixers/content-mismatch

Fixes the 64k (or multiple) content mismatch files of an instance

Request

POST /instances/alice.cozy.localhost/fixers/content-mismatch HTTP/1.1
Content-Type: application/json
{
  "dry_run": true
}

The dry_run (default to true) body parameter tells if the request is a dry-run or not.

Response

HTTP/1.1 200 OK
Content-Type: application/json
{
  "dry_run": true,
  "updated": [
    {
      "filepath": "/file64.txt",
      "id": "3c79846513e81aee78ab30849d006550",
      "created_at": "2019-07-30 15:05:27.268876334 +0200 CEST",
      "updated_at": "2019-07-30 15:05:27.268876334 +0200 CEST"
    }
  ],
  "removed": [
    {
      "filepath": "/.cozy_trash/file64.txt-corrupted",
      "id": "3c79846513e81aee78ab30849d001f98",
      "created_at": "2019-07-30 10:18:28.826400117 +0200 CEST",
      "updated_at": "2019-07-30 14:32:29.862882247 +0200 CEST"
    }
  ],
  "domain": "alice.cozy.localhost"
}

POST /instances/:domain/fixers/password-defined

Fill the password_defined field of the io.cozy.settings.instance if it was missing.

Request

POST /instances/alice.cozy.localhost/fixers/password-defined HTTP/1.1

POST /instances/:domain/fixers/orphan-account

Delete the accounts which are not linked to a konnector

Request

POST /instances/alice.cozy.localhost/fixers/orphan-account HTTP/1.1

POST /instances/:domain/export

Starts an export for the given instance. The CouchDB documents will be saved in an intermediary archive while the files won't be added until the data is actually downloaded.

The response contains the details of the scheduled export job.

Query-String

Parameter Description
admin-req Boolean indicating when the request is made by an admin and the user should not be notified

The admin-req parameter is optional: by default, the instance's owner will be notified via e-mail, whether the export is successful or not. If it's successful, the e-mail will contain a link to the Settings app allowing the user to download the data archives. When this parameter is true, no e-mails will be sent and the admin will be able to get the export document via realtime events.

Request

POST /instances/alice.cozy.localhost/export?admin-req=true HTTP/1.1

Response

HTTP/1.1 204 Accepted
Content-Type: application/json
{
  "_id": "123123",
  "_rev": "1-58d2b368da0a1b336bcd18ced210a8a1",
  "domain": "alice.cozy.localhost",
   "prefix": "cozyfdd8fd8eb825ad98821b11871abf58c9",
   "worker": "export",
   "message": {
     "parts_size": 0,
     "max_age": 0,
     "contextual_domain": "alice.cozy.localhost",
     "admin_req": true
   },
   "event": null,
   "state": "queued",
   "queued_at": "2023-02-01T11:50:59.286530525+01:00",
   "started_at": "0001-01-01T00:00:00Z",
   "finished_at": "0001-01-01T00:00:00Z"
}

GET /instances/:domain/exports/:export-id/data

This endpoint will return an archive containing the metadata and files of the user, as part of a multi-part response.

Only the first part of the archive contains the metadata.

Query-String

Parameter Description
cursor String reprentation of the export cursor to start the download from

The cursor parameter is optional but any given cursor should be one of the defined parts_cursors in the export document. To get all the parts, this endpoint must be called one time with no cursors, and one time for each cursor in parts_cursors.

Request

GET /instances/alice.cozy.localhost/exports/123123/data?cursor=io.cozy.files%2Fa27b3bae83160774a74525de670d5d8e HTTP/1.1

Response

HTTP/1.1 200 OK
Content-Type: application/zip
Content-Disposition: attachment; filename="alice.cozy.localhost - part001.zip"

POST /instances/:domain/notifications

This endpoint allows to send a notification via the notification center. Both the notification declaration and its properties need to be passed in the body. These notifications cannot use templates defined in cozy-stack though so their e-mail content must be provided directly (at least in HTML).

When the request is successful, the generated notification object is returned.

POST /instances/alice.cozy.localhost/notifications HTTP/1.1
Authorization: Bearer ...
Content-Type: application/json
{
    "notification": {
        "category": "account-balance",
        "category_id": "my-bank",
        "title": "Your account balance is not OK",
        "message": "Warning: we have detected a negative balance in your my-bank",
        "priority": "high",
        "state": "-1",
        "preferred_channels": ["mobile"],
        "content": "Hello,\r\nWe have detected a negative balance in your my-bank account.",
        "content_html": "<html>\r\n\t<body>\r\n\t<p>Hello,<br/>We have detected a negative balance in your my-bank account.</p>\r\n\t</body>\r\n\t</html>"
    },
    "properties": {
        "description": "Alert the user when its account balance is negative",
        "collapsible": true,
        "multiple": true,
        "stateful": true,
        "default_priority": "high"
    }
}

Response

HTTP/1.1 201 Created
Content-Type: application/json
{
    "_id": "c57a548c-7602-11e7-933b-6f27603d27da",
    "_rev": "1-1f2903f9a867",
    "source_id": "cozy/cli//account-balance/my-bank",
    "originator": "cli",
    "category": "account-balance",
    "category_id": "my-bank",
    "created_at": "2024-01-04T15:23:01.832Z",
    "last_sent": "2024-01-04T15:23:01.832Z",
    "title": "Your account balance is not OK",
    "message": "Warning: we have detected a negative balance in your my-bank",
    "priority": "high",
    "state": "-1",
    "content": "Hello,\r\nWe have detected a negative balance in your my-bank account.",
    "contentHTML": "<html>\r\n\t<body>\r\n\t<p>Hello,<br/>We have detected a negative balance in your my-bank account.</p>\r\n\t</body>\r\n\t</html>"
}

Contexts

GET /instances/contexts

This endpoint returns the list of the contexts, with their name, config, registries, office server, cloudery endpoints, and OIDC data.

Request

GET /instances/contexts HTTP/1.1

Response

HTTP/1.1 200 OK
[
  {
    "config": {
      "claudy_actions": [
        "desktop",
        "mobile",
        "support"
      ],
      "debug": true,
      "features": [
        {
          "foo": "bar"
        },
        {
          "baz": [
            "qux",
            "quux"
          ]
        }
      ],
      "help_link": "https://forum.cozy.io/",
      "noreply_address": "[email protected]",
      "noreply_name": "My Cozy Beta",
      "sharing_domain": "cozy.localhost"
    },
    "context": "dev",
    "registries": [
      "https://apps-registry.cozycloud.cc/"
    ],
    "office": {
      "OnlyOfficeURL": "https://documentserver.cozycloud.cc/"
    },
    "cloudery_endpoint": "",
    "oidc": {
      "allow_oauth_token": false,
      "authorize_url": "https://identity-prodiver/path/to/authorize",
      "client_id": "aClientID",
      "id_token_jwk_url": "https://identity-prodiver/path/to/jwk",
      "login_domain": "login.mycozy.cloud",
      "redirect_uri": "https://oauthcallback.mycozy.cloud/oidc/redirect",
      "scope": "openid profile",
      "token_url": "https://identity-prodiver/path/to/token",
      "userinfo_instance_field": "cozy_number",
      "userinfo_instance_prefix": "name",
      "userinfo_instance_suffix": ".mycozy.cloud",
      "userinfo_url": "https://identity-prodiver/path/to/userinfo"
    }
  }
]

GET /instances/contexts/:name

This endpoint returns the config of a given context.

Request

GET /instances/contexts/dev HTTP/1.1

Response

HTTP/1.1 200 OK
{
  "config": {
    "claudy_actions": [
      "desktop",
      "mobile",
      "support"
    ],
    "debug": true,
    "features": [
      {
        "foo": "bar"
      },
      {
        "baz": [
          "qux",
          "quux"
        ]
      }
    ],
    "help_link": "https://forum.cozy.io/",
    "noreply_address": "[email protected]",
    "noreply_name": "My Cozy Beta",
    "sharing_domain": "cozy.localhost"
  },
  "context": "dev",
  "registries": [
    "https://apps-registry.cozycloud.cc/"
  ],
  "office": {
    "OnlyOfficeURL": "https://documentserver.cozycloud.cc/",
    "InboxSecret": "inbox_secret",
    "OutboxSecret": "outbox_secret"
  },
  "cloudery_endpoint": ""
}

Checkers

GET /instances/:domain/fsck

This endpoint can be use to check the VFS of a given instance. It accepts three possible parameters in the query-string:

  • IndexIntegrity=true to check only the integrity of the data in CouchDB
  • FilesConsistency to check the consistency between CouchDB and Swift
  • FailFast to abort on the first error.

It will returns a 200 OK, except if the instance is not found where the code will be 404 Not Found (a 5xx can also happen in case of server errors like CouchDB not available). The format of the response will be one JSON per line, and each JSON represents an error.

Request

GET /instances/alice.cozy.localhost/fsck HTTP/1.1

Response

HTTP/1.1 200 OK
{"type":"index_orphan_tree","dir_doc":{"type":"directory","_id":"34a61c6ceb38075fe971cc6a3263659f","_rev":"2-94ca3acfebf927cb231d125c57f85bd7","name":"Photos","dir_id":"45496c5c442dabecae87de3d73008ec4","created_at":"2020-12-15T18:23:21.498323965+01:00","updated_at":"2020-12-15T18:23:21.498323965+01:00","tags":[],"path":"/Photos","cozyMetadata":{"doctypeVersion":"1","metadataVersion":1,"createdAt":"2020-12-15T18:23:21.498327603+01:00","updatedAt":"2020-12-15T18:23:21.498327603+01:00","createdOn":"http://alice.cozy.localhost:8080/"},"size":"0","is_dir":true,"is_orphan":true,"has_cycle":false},"is_file":false,"is_version":false}
{"type":"index_missing","file_doc":{"type":"file","name":"Photos","dir_id":"","created_at":"2020-12-15T18:23:21.527308795+01:00","updated_at":"2020-12-15T18:23:21.527308795+01:00","tags":null,"path":"/Photos","size":"4096","mime":"application/octet-stream","class":"files","executable":true,"is_dir":false,"is_orphan":false,"has_cycle":false},"is_file":true,"is_version":false}

POST /instances/:domain/checks/triggers

This endpoint will check if no trigger has been installed twice (or more).

Request

POST /instances/alice.cozy.localhost/checks/triggers HTTP/1.1

Response

HTTP/1.1 200 OK
Content-Type: application/json
[
  {
    "_id": "45496c5c442dabecae87de3d7300666f",
    "arguments": "io.cozy.files:CREATED,UPDATED,DELETED:image:class",
    "debounce": "",
    "other_id": "34a61c6ceb38075fe971cc6a3263895f",
    "trigger": "@event",
    "type": "duplicate",
    "worker": "thumbnail"
  }
]

POST /instances/:domain/checks/shared

This endpoint will check that the io.cozy.shared documents have a correct revision tree (no generation smaller for a children than its parent).

Request

POST /instances/alice.cozy.localhost/checks/shared HTTP/1.1

Response

HTTP/1.1 200 OK
Content-Type: application/json
[
  {"_id":"io.cozy.files/fd1706de234d17d1ac2fe560051a2aae","child_rev":"1-e19947b4f9bfb273bc8958ae932ae4c7","parent_rev":"2-4f82af35577dbc9b686dd447719e4835","type":"invalid_revs_suite"},
  {"_id":"io.cozy.files/fd9bef5df406f5b150f302b8c5b3f5f0","child_rev":"7-05bb459e0ac5450c17df79ed1f13afa1","parent_rev":"8-07b4cafef3c2e74e698ee4a04d1874c2","type":"invalid_revs_suite"}
]

POST /instances/:domain/checks/sharings

This endpoint can be used to check the setup of sharings owned by a given instance and the consistency of the shared files and folders with their counterparts on the Cozy they're shared with. It accepts one parameter in the query-string:

  • Fast to skip the files and folders consistency check as it can be quite long

It will return a 200 OK, except if the instance is not found where the code will be 404 Not Found (a 5xx can also happen in case of server errors like CouchDB not available). The format of the response will be a JSON array of objects, each object representing an error.

Possible error types

invalid_rules

This will be raised when the owner's sharing rules are invalid. The validation result will be returned in the error attribute.

sharing_in_sharing

This will be raised when the root of the sharing being checked is part of another sharing (i.e. one of its parent folders is shared). The parent sharing can be found either on the owner's instance or on one of its members' instance. The parent_sharing attribute will contain the parent sharing ID.

missing_matching_docs_for_owner

This will be raised if the shared files and folders associated with the sharing could not be fetched on the owner's instance. The request error will be returned in the error attribute. No further consistency checks will be run on this sharing.

missing_sharing_for_member

This will be raised when the associated io.cozy.sharing document cannot be found on a sharing member's instance. The request error will be returned in the error attribute. No further consistency checks will be run for this member.

missing_files_rule_for_member

This will be raised if a member's sharing doesn't have any sharing rule for io.cozy.files documents (while the owner's sharing has been determined to be of this type). The member's domain will be available in the member attribute. No further consistency checks will be run for this member.

missing_matching_docs_for_member

This will be raised if the shared files and folders associated with the sharing could not be fetched on a member's instance. The request error will be returned in the error attribute and the member's domain in the member attribute. No further consistency checks will be run for this member.

disk_quota_exceeded

This will be raised if a file is outdated or missing on an instance and its size is larger than the available space on this instance. If the file was created or modified in the last 5 minutes, the check is skipped as we expect the synchronization to happen later. The instance's domain will be available in the instance attribute.

read_only_member

This will be raised if a file or folder is outdated or missing on the owner's instance and the member being checked has only read-only access to the sharing. This is not really an error as this behavior is expected but since it can be confusing for users we log it for debugging purposes. The member's domain will be available in the member attribute.

invalid_doc_rev

This will be raised if a file or folder's revisions don't match on the owner's and member's instances while the member has write access to the sharing and the file size is not greater than the outdated instance's available disk space. The revisions generations can be the same too. If the document was modified in the last 5 minutes, the check is skipped as we expect the synchronization to happen later. The member's domain will be available in the member attribute, as well as the revision of the member document in memberRev and the complete owner document in ownerDoc.

invalid_doc_name

This will be raised if a file or folder's revisions match on the owner's and member's instances but their names don't. The member's domain will be available in the member attribute, as well as the name of the member document in memberName and the complete owner document in ownerDoc.

invalid_doc_checksum

This will be raised if a file's revisions match on the owner's and member's instances but their checksums don't. The member's domain will be available in the member attribute, as well as the checksum of the member file in memberChecksum and the complete owner document in ownerDoc.

invalid_doc_parent

This will be raised if a file or folder's parent directories don't match on the owner's and member's instances but their names don't. Since it is expected for the sharing root to not have different parents on each instance, the check does not apply to this document. The member's domain will be available in the member attribute, as well as the id of the member's parent directory in memberParent and the complete owner document in ownerDoc.

missing_matching_doc_for_owner

This will be raised if a file or directory is missing on the owner's instance while the member being check has write access to the sharing and the file size is not greater than the instance's available disk space. If the missing document was created or modified in the last 5 minutes, the check is skipped as we expect the synchronization to happen later. The member's domain will be available in the member attribute and the complete missing member document in memberDoc.

missing_matching_doc_for_member

This will be raised if a file or directory is missing on a member's instance while the file size is not greater than the instance's available disk space. If the missing document was created or modified in the last 5 minutes, the check is skipped as we expect the synchronization to happen later. The member's domain will be available in the member attribute and the complete missing owner document in ownerDoc.

===

Other error types include missing_trigger_on_active_sharing, trigger_on_inactive_sharing, not_enough_members, mail_not_sent, invalid_member_status, invalid_instance_for_member, missing_instance_for_member, missing_oauth_client, missing_access_token, invalid_number_of_credentials and missing_inbound_client_id.

When checking for files and folders inconsistencies, sharings will be skipped when inactive, not initialized, read-only or not about io.cozy.files documents. Also, for each instance, only the sharings owned by said instance will be checked. Other sharings will be checked via their owner instance.

Request

POST /instances/alice.cozy.localhost/checks/sharings HTTP/1.1

Response

HTTP/1.1 200 OK
Content-Type: application/json
[
  {"id":"314d69d7ebaed0a1870cca67f4433390","trigger":"track","trigger_id":"314d69d7ebaed0a1870cca67f4d75e41","type":"trigger_on_inactive_sharing"},
  {"id":"314d69d7ebaed0a1870cca67f4433390","trigger":"replicate","trigger_id":"314d69d7ebaed0a1870cca67f4d75e41","type":"trigger_on_inactive_sharing"},
  {"id":"314d69d7ebaed0a1870cca67f4433390","trigger":"upload","trigger_id":"314d69d7ebaed0a1870cca67f4d75e41","type":"trigger_on_inactive_sharing"},
  {"id":"314d69d7ebaed0a1870cca67f4433390","member":0,"status":"revoked","type":"invalid_member_status"},
  {"id":"314d69d7ebaed0a1870cca67f4433390","nb_members":0,"owner":false,"type":"invalid_number_of_credentials"}
]

Konnectors

GET /konnectors/maintenance

Request

GET /konnectors/maintenance HTTP/1.1

A parameter Context can be given on the query string to also includes the konnectors that are in maintenance on the apps registry.

Response

HTTP/1.1 200 OK
Content-Type: application/json
{
  "meta": {
    "count": 1
  },
  "data": [
    {
      "type": "io.cozy.konnectors.maintenance",
      "attributes": {
        "level": "stack",
        "maintenance_activated": true,
        "maintenance_options": {
          "flag_disallow_manual_exec": false,
          "flag_infra_maintenance": true,
          "flag_short_maintenance": true,
          "messages": {
            "fr": {
              "long_message": "Bla bla bla",
              "short_message": "Bla"
            }
          }
        },
        "slug": "ameli",
        "type": "konnector"
      }
    }
  ]
}

Note: level can be stack or registry.

PUT /konnectors/maintenance/:slug

Request

PUT /konnectors/maintenance/ameli HTTP/1.1
Content-Type: application/vnd.api+json
{
  "data": {
    "attributes": {
      "flag_short_maintenance": true,
      "flag_disallow_manual_exec": false,
      "messages": {
        "fr": {
          "long_message": "Bla bla bla",
          "short_message": "Bla"
        },
        "en": {
          "long_message": "Yadi yadi yada",
          "short_message": "Yada"
        }
      }
    }
  }
}

Note: the flag_infra_maintenance will always be set to true with this endpoint.

Response

HTTP/1.1 204 No Content

DELETE /konnectors/maintenance/:slug

Request

DELETE /konnectors/maintenance/ameli HTTP/1.1

Response

HTTP/1.1 204 No Content

OIDC

POST /oidc/:context/:provider/code

This endpoint is used by the cloudery to create a delegated code, which will be then used by the flagship app to obtain its access_token and refresh_token. The :provider parameter can be generic or franceconnect.

The cloudery sends its access_token for the OIDC provider, the stack can use it to make a request to the userinfo endpoint of the OIDC provider. With the response, the stack can create a delegated code associated to the sub.

POST /oidc/dev/franceconnect/code HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer ZmE2ZTFmN
{
  "access_token": "ZmE2ZTFmN"
}
HTTP/1.1 200 OK
Content-Type: application/json
{
  "delegated_code": "wMTNiLTNmZWItMThY",
  "sub": "DIzYWE2MjA",
  "email": "[email protected]"
}

OAuth clients

DELETE /oauth/:domain/clients

Delete all the OAuth clients for the given instance. It can be limited to a specific kind of clients (desktop, mobile, sharing, etc.) by using the Kind parameter of the query-string. It returns the number of clients that have been deleted.

Request

DELETE /oauth/cozy.example/clients HTTP/1.1

Response

HTTP/1.1 200 OK
{"count": 42}

Swift

GET /swift/layouts

Count swift layouts by type

Request

GET /swift/layouts HTTP/1.1

Response

HTTP/1.1 200 OK
Content-Type: application/json
{
  "total": 3,
  "unknown": {
    "counter": 0
  },
  "v1": {
    "counter": 1
  },
  "v2a": {
    "counter": 0
  },
  "v2b": {
    "counter": 0
  },
  "v3a": {
    "counter": 2
  },
  "v3b": {
    "counter": 4
  }
}

The show_domains=true query parameter provides the domain names if needed

Request

GET /swift/layouts?show_domains=true HTTP/1.1

Response

HTTP/1.1 200 OK
Content-Type: application/json
{
  "total": 3,
  "unknown": {
    "counter": 0
  },
  "v1": {
    "counter": 1,
    "domains": [
      "bob.cozy.localhost:8081"
    ]
  },
  "v2a": {
    "counter": 0
  },
  "v2b": {
    "counter": 0
  },
  "v3a": {
    "counter": 2,
    "domains": [
      "alice.cozy.localhost:8081",
      "ru.cozy.localhost:8081"
    ]
  },
  "v3b": {
    "counter": 4,
    "domains": [
      "foo.cozy.localhost:8081",
      "bar.cozy.localhost:8081",
      "baz.cozy.localhost:8081",
      "foobar.cozy.localhost:8081"
    ]
  }
}

GET /swift/vfs/:object

Retrieves a Swift object

Request

GET /swift/vfs/67a88b22520680b1fae840%2F9a8a0%2F18d02%2FiYbkfuCDEMaVoIXg HTTP/1.1
Host: alice.cozy.localhost

Response

HTTP/1.1 200 OK
Content-Type: text/plain
"foobar"

PUT /swift/vfs/:object

Put an object in Swift

Request

PUT /swift/vfs/67a88b22520680b1fae840%2F9a8a0%2F18d02%2FiYbkfuCDEMaVoIXg HTTP/1.1
Host: alice.cozy.localhost
Content-Type: text/plain
"this is my content"

DELETE /swift/vfs/:object

Removes an object from Swift

Request

DELETE /swift/vfs/67a88b22520680b1fae840%2F9a8a0%2F18d02%2FiYbkfuCDEMaVoIXg HTTP/1.1
Host: alice.cozy.localhost

GET /swift/vfs

List Swift objects of an instance

Request

GET /swift/vfs HTTP/1.1
Host: alice.cozy.localhost

Response

HTTP/1.1 200 OK
Content-Type: application/json
{
  "objects_names": [
    "67a88b22520680b1fae840/9a8a0/17264/AxfGhAiWVRhPufKK",
    "67a88b22520680b1fae840/9a8a0/18d02/iYbkfuCDEMaVoIXg",
    "thumbs/67a88b22520680b1fae840/9a8a0/17264-large",
    "thumbs/67a88b22520680b1fae840/9a8a0/17264-medium",
    "thumbs/67a88b22520680b1fae840/9a8a0/17264-small",
    "thumbs/67a88b22520680b1fae840/9a8a0/17264-tiny"
  ]
}

Tools

GET /tools/pprof/heap

Return a sampling of memory allocations as pprof format.

Request

GET /tools/pprof/heap HTTP/1.1

Response

HTTP/1.1 200 OK