Back to top

Webhooks

Webhooks are an essential part of Beeple.

Webhooks can be either installed by marketplace extensions or manually configured by the end user.

For each type (collaborators, SMS communications, etc.) one can configure one or more URLs but one URL might receive different actions (create, update, delete) as different HTTP verbs. If you subscribe to one type, all the verbs should be accepted (but can be a no-op implementation).

Idempotency

All described URLs should be idempotent. Meaning that if for some reason, the Beeple system sends a request multiple times, and the request was already received nothing should change in the receiving system.

In case of network failures or other invalid responses, Beeple will retry the same request multiple times over a period of time.

Authentication

All requests are also signed with a private token so the authenticity of the sender and receiver can be validated.

Each request will contain 3 headers:

  • Authentication-Reference: (string) - A reference, this will be unique per request. The format is unspecified

  • Authentication-Epoch: (number) - A UNIX epoch timestamp.

  • Authentication-Signature: (string) - The signed combination of reference and epoch.

To validate a request the following steps need to happen:

  • Authentication-Epoch should not be longer ago than 5 minutes.

  • Authentication-Reference should not be reused. In principle References can be recycled after 5 minutes, so there is no hard requirement to store the references for much longer than 5 minutes.

  • A string is created with the concatenation of Authentication-Reference and Authentication-Epoch

  • This string is hashed according with the SHA512 digest

  • The digest is HMAC encoded with a private token as key (known by both sender and receiver)

  • The hex value of this hash is taken, and should match the Authentication-Signature.

In pseudo code this looks like

epoch = Header[Authenticaion-Epoch]
  if age(epoch) > 5 minutes
    ignore message
  else
    digest = Sha512Digest(private_key)

    reference = Header[Authenticaion-Reference] + Header[Authenticaion-Epoch]
    hmac = hmac_hexdigest(SHA512, private_key, reference)

    if hexdigest equals Header[Authentication-Signature]
      accept message
    else
      ignore message
    end
  end

Collaborators

Collaborator

This webhook is sent every time a collaborator is created/deleted/updated within Beeple

Create a collaborator
POST/collaborators

Example URI

POST /collaborators
Request
HideShow
Headers
Content-Type: application/json
Body
{
  "company": {
    "name": "My company",
    "beeple_id": "273e949a-bb41-4f36-9526-d1d0a8043c91",
    "enterprise_number": "0101010101",
    "payroll_service_id": "5"
  },
  "collaborator": {
    "first_name": "John",
    "last_name": "Doe",
    "prefix": "De",
    "beeple_id": 2403,
    "birth_date": "1995-05-07",
    "birth_city": "Antwerpen",
    "birth_country": "BE",
    "gender": "male",
    "language": "en",
    "nationality": "BE",
    "national_registration_numbers": [
      {
        "country": "BE",
        "number": "95.05.07-997.47"
      }
    ],
    "social_statute": "Arbeider",
    "social_statute_code": "career_pause",
    "home_address": {
      "street1": "Dorpstraat 1",
      "street2": "Bus 1",
      "zip": "2018",
      "city": "Antwerpen",
      "administrative_area_level_1": "Hello, world!",
      "administrative_area_level_2": "Hello, world!",
      "administrative_area_level_3": "Hello, world!",
      "administrative_area_level_4": "Hello, world!",
      "administrative_area_level_5": "Hello, world!",
      "country": "BE"
    },
    "bank_account": {
      "iban": "BE68539007547034",
      "bic": "HBKABE22"
    },
    "blocked": false,
    "blocked_reason": "nothing to say",
    "contact": {
      "email": "john.doe@example.org",
      "mobile": "+32498525251"
    },
    "departments": [
      {
        "id": 2403,
        "name": "Accounting"
      }
    ],
    "primary_department_id": 7487,
    "primary_manager_id": 122,
    "profile_properties": [
      {
        "group": "Legal information",
        "profile_property_id": 1888,
        "name": "Marital status",
        "description": "Here you can enter your official marital status",
        "type": "boolean",
        "numeric_unit": "km",
        "value_boolean": true,
        "value_string": "Married",
        "value_list_multi": [
          "english"
        ],
        "value_date": "2017-05-08",
        "value_time": "17:00:00.000+02:00",
        "value_datetime": "2017-05-08T17:00:00.000+02:00",
        "value_numeric": 23.5,
        "value_upload_url": "https://planning.tenant.be/api/v1/uploads/volunteers/volunteers_profile_property/upload_collaborator/5916/uploaded_file.docx",
        "comment": "Since 15/5/1995",
        "expiration_date": "2017-05-08",
        "piece_of_evidence": "https://planning.tenant.be/api/v1/uploads/volunteers/volunteers_profile_property/documented_proof_verified/43413/piece_of_evidence_file.docx"
      }
    ]
  }
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "company": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the company (tenant). Can change and is mainly for displaying purposes"
        },
        "beeple_id": {
          "type": "string",
          "description": "The ID of the Beeple Tenant (a UUID). Will never change for a given tenant."
        },
        "enterprise_number": {
          "type": "string",
          "description": "Enterprise number of this company"
        },
        "payroll_service_id": {
          "type": "string",
          "description": "A payroll service ID."
        }
      },
      "required": [
        "name",
        "beeple_id"
      ],
      "description": "Company that is sending this information."
    },
    "collaborator": {
      "type": "object",
      "properties": {
        "first_name": {
          "type": "string",
          "description": "First name"
        },
        "last_name": {
          "type": "string",
          "description": "Last name"
        },
        "prefix": {
          "type": "string",
          "description": "Last name prefix, this is what appears on the screen of the web application as \"infix\"; for example John De Doe"
        },
        "beeple_id": {
          "type": "number",
          "description": "Identification number within Beeple"
        },
        "birth_date": {
          "type": "string",
          "description": "Birth date according RFC 3339"
        },
        "birth_city": {
          "type": "string",
          "description": "Birth city"
        },
        "birth_country": {
          "type": "string",
          "description": "Birth country according to ISO 3166-1 alpha-2"
        },
        "gender": {
          "type": "string",
          "enum": [
            "male",
            "female"
          ],
          "description": "Gender"
        },
        "language": {
          "type": "string",
          "description": "Language in which to communicate with the collaborator according to ISO 639-1"
        },
        "nationality": {
          "type": "string",
          "description": "According to ISO 3166-1 alpha-2"
        },
        "national_registration_numbers": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "country": {
                "type": "string",
                "description": "Country for which the number is valid according to ISO 3166-1 alpha-2"
              },
              "number": {
                "type": "string"
              }
            }
          }
        },
        "social_statute": {
          "type": "string",
          "description": "The social statute"
        },
        "social_statute_code": {
          "type": "string",
          "enum": [
            "career_pause",
            "disabled_entrepreneur",
            "early_retired",
            "entrepreneur",
            "flexijobs",
            "functionary",
            "incapacitated",
            "living_wager",
            "retired",
            "student",
            "unemployed",
            "unemployed_waiting_period",
            "unknown",
            "working_class",
            "working_class_blue_collar",
            "work_student"
          ],
          "description": "The social statute"
        },
        "home_address": {
          "type": "object",
          "properties": {
            "street1": {
              "type": "string",
              "description": "Street + house number"
            },
            "street2": {
              "type": "string",
              "description": "Extension of street1"
            },
            "zip": {
              "type": "string"
            },
            "city": {
              "type": "string"
            },
            "administrative_area_level_1": {
              "type": "string",
              "description": "An extra administrative level, depends per country / tenant what this means"
            },
            "administrative_area_level_2": {
              "type": "string",
              "description": "An extra administrative level, depends per country / tenant what this means"
            },
            "administrative_area_level_3": {
              "type": "string",
              "description": "An extra administrative level, depends per country / tenant what this means"
            },
            "administrative_area_level_4": {
              "type": "string",
              "description": "An extra administrative level, depends per country / tenant what this means"
            },
            "administrative_area_level_5": {
              "type": "string",
              "description": "An extra administrative level, depends per country / tenant what this means"
            },
            "country": {
              "type": "string",
              "description": "According to ISO 3166-1 alpha-2"
            }
          }
        },
        "bank_account": {
          "type": "object",
          "properties": {
            "iban": {
              "type": "string"
            },
            "bic": {
              "type": "string"
            }
          }
        },
        "blocked": {
          "type": "boolean",
          "description": "Indicates if the user is blocked"
        },
        "blocked_reason": {
          "type": "string",
          "description": "A comment posted during block or unblock"
        },
        "contact": {
          "type": "object",
          "properties": {
            "email": {
              "type": "string"
            },
            "mobile": {
              "type": "string"
            }
          },
          "required": [
            "email"
          ]
        },
        "departments": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "number",
                "description": "Identification number of the department within Beeple"
              },
              "name": {
                "type": "string",
                "description": "Name of the department"
              }
            },
            "required": [
              "id"
            ]
          },
          "description": "List of departments the collaborator belongs to"
        },
        "primary_department_id": {
          "type": "number",
          "description": "The ID of the collaborator's primary department. Will be the id of one of the collaborator's departments"
        },
        "primary_manager_id": {
          "type": "number",
          "description": "The ID of the collaborator's manager. Must be a collaborator that is an admin and has access rights to approve availabilities."
        },
        "profile_properties": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "group": {
                "type": "string",
                "description": "Group of profile properties"
              },
              "profile_property_id": {
                "type": "number",
                "description": "Id of the profile property"
              },
              "name": {
                "type": "string",
                "description": "Name of the profile property"
              },
              "description": {
                "type": "string",
                "description": "Description of the profile property"
              },
              "type": {
                "type": "string",
                "enum": [
                  "boolean",
                  "numeric",
                  "freetext",
                  "freetext_multiline",
                  "list_single_option",
                  "list_multi_option",
                  "date",
                  "time",
                  "datetime",
                  "upload"
                ],
                "description": "Type of content of the profile property"
              },
              "numeric_unit": {
                "type": "string",
                "description": "Unit in which a profile property of type numeric is expressed"
              },
              "value_boolean": {
                "type": "boolean",
                "description": "Value of the profile property.  Filled for type = boolean"
              },
              "value_string": {
                "type": "string",
                "description": "Value of the profile property.  Filled for type = freetext, freetext_multiline or list_single_option"
              },
              "value_list_multi": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Filled for type = list_multi_option"
              },
              "value_date": {
                "type": "string",
                "description": "Value of the profile property. Filled for type = date according to RFC 3339"
              },
              "value_time": {
                "type": "string",
                "description": "Value of the profile property. Filled for type = time according to RFC 3339"
              },
              "value_datetime": {
                "type": "string",
                "description": "Value of the profile property. Filled for type = datetime according to RFC 3339"
              },
              "value_numeric": {
                "type": "number",
                "description": "Value of the profile property.  Filled for type = numeric"
              },
              "value_upload_url": {
                "type": "string",
                "description": "Value (URL) of the profile property. Filled for type = upload"
              },
              "comment": {
                "type": "string",
                "description": "Comment concerning the value of the profile property"
              },
              "expiration_date": {
                "type": "string",
                "description": "Date the value of the profile property expires according to RFC 3339"
              },
              "piece_of_evidence": {
                "type": "string",
                "description": "Piece of evidence (URL) for the value of the profile property"
              }
            }
          }
        }
      },
      "required": [
        "first_name",
        "last_name",
        "prefix",
        "beeple_id",
        "language",
        "primary_department_id",
        "primary_manager_id"
      ]
    }
  }
}
Response  200

Delete a collaborator
DELETE/collaborators

Example URI

DELETE /collaborators
Request
HideShow
Headers
Content-Type: application/json
Body
{
  "company": {
    "name": "My company",
    "beeple_id": "273e949a-bb41-4f36-9526-d1d0a8043c91",
    "enterprise_number": "0101010101",
    "payroll_service_id": "5"
  },
  "collaborator": {
    "first_name": "John",
    "last_name": "Doe",
    "prefix": "De",
    "beeple_id": 2403,
    "birth_date": "1995-05-07",
    "birth_city": "Antwerpen",
    "birth_country": "BE",
    "gender": "male",
    "language": "en",
    "nationality": "BE",
    "national_registration_numbers": [
      {
        "country": "BE",
        "number": "95.05.07-997.47"
      }
    ],
    "social_statute": "Arbeider",
    "social_statute_code": "career_pause",
    "home_address": {
      "street1": "Dorpstraat 1",
      "street2": "Bus 1",
      "zip": "2018",
      "city": "Antwerpen",
      "administrative_area_level_1": "Hello, world!",
      "administrative_area_level_2": "Hello, world!",
      "administrative_area_level_3": "Hello, world!",
      "administrative_area_level_4": "Hello, world!",
      "administrative_area_level_5": "Hello, world!",
      "country": "BE"
    },
    "bank_account": {
      "iban": "BE68539007547034",
      "bic": "HBKABE22"
    },
    "blocked": false,
    "blocked_reason": "nothing to say",
    "contact": {
      "email": "john.doe@example.org",
      "mobile": "+32498525251"
    },
    "departments": [
      {
        "id": 2403,
        "name": "Accounting"
      }
    ],
    "primary_department_id": 7487,
    "primary_manager_id": 122,
    "profile_properties": [
      {
        "group": "Legal information",
        "profile_property_id": 1888,
        "name": "Marital status",
        "description": "Here you can enter your official marital status",
        "type": "boolean",
        "numeric_unit": "km",
        "value_boolean": true,
        "value_string": "Married",
        "value_list_multi": [
          "english"
        ],
        "value_date": "2017-05-08",
        "value_time": "17:00:00.000+02:00",
        "value_datetime": "2017-05-08T17:00:00.000+02:00",
        "value_numeric": 23.5,
        "value_upload_url": "https://planning.tenant.be/api/v1/uploads/volunteers/volunteers_profile_property/upload_collaborator/5916/uploaded_file.docx",
        "comment": "Since 15/5/1995",
        "expiration_date": "2017-05-08",
        "piece_of_evidence": "https://planning.tenant.be/api/v1/uploads/volunteers/volunteers_profile_property/documented_proof_verified/43413/piece_of_evidence_file.docx"
      }
    ]
  }
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "company": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the company (tenant). Can change and is mainly for displaying purposes"
        },
        "beeple_id": {
          "type": "string",
          "description": "The ID of the Beeple Tenant (a UUID). Will never change for a given tenant."
        },
        "enterprise_number": {
          "type": "string",
          "description": "Enterprise number of this company"
        },
        "payroll_service_id": {
          "type": "string",
          "description": "A payroll service ID."
        }
      },
      "required": [
        "name",
        "beeple_id"
      ],
      "description": "Company that is sending this information."
    },
    "collaborator": {
      "type": "object",
      "properties": {
        "first_name": {
          "type": "string",
          "description": "First name"
        },
        "last_name": {
          "type": "string",
          "description": "Last name"
        },
        "prefix": {
          "type": "string",
          "description": "Last name prefix, this is what appears on the screen of the web application as \"infix\"; for example John De Doe"
        },
        "beeple_id": {
          "type": "number",
          "description": "Identification number within Beeple"
        },
        "birth_date": {
          "type": "string",
          "description": "Birth date according RFC 3339"
        },
        "birth_city": {
          "type": "string",
          "description": "Birth city"
        },
        "birth_country": {
          "type": "string",
          "description": "Birth country according to ISO 3166-1 alpha-2"
        },
        "gender": {
          "type": "string",
          "enum": [
            "male",
            "female"
          ],
          "description": "Gender"
        },
        "language": {
          "type": "string",
          "description": "Language in which to communicate with the collaborator according to ISO 639-1"
        },
        "nationality": {
          "type": "string",
          "description": "According to ISO 3166-1 alpha-2"
        },
        "national_registration_numbers": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "country": {
                "type": "string",
                "description": "Country for which the number is valid according to ISO 3166-1 alpha-2"
              },
              "number": {
                "type": "string"
              }
            }
          }
        },
        "social_statute": {
          "type": "string",
          "description": "The social statute"
        },
        "social_statute_code": {
          "type": "string",
          "enum": [
            "career_pause",
            "disabled_entrepreneur",
            "early_retired",
            "entrepreneur",
            "flexijobs",
            "functionary",
            "incapacitated",
            "living_wager",
            "retired",
            "student",
            "unemployed",
            "unemployed_waiting_period",
            "unknown",
            "working_class",
            "working_class_blue_collar",
            "work_student"
          ],
          "description": "The social statute"
        },
        "home_address": {
          "type": "object",
          "properties": {
            "street1": {
              "type": "string",
              "description": "Street + house number"
            },
            "street2": {
              "type": "string",
              "description": "Extension of street1"
            },
            "zip": {
              "type": "string"
            },
            "city": {
              "type": "string"
            },
            "administrative_area_level_1": {
              "type": "string",
              "description": "An extra administrative level, depends per country / tenant what this means"
            },
            "administrative_area_level_2": {
              "type": "string",
              "description": "An extra administrative level, depends per country / tenant what this means"
            },
            "administrative_area_level_3": {
              "type": "string",
              "description": "An extra administrative level, depends per country / tenant what this means"
            },
            "administrative_area_level_4": {
              "type": "string",
              "description": "An extra administrative level, depends per country / tenant what this means"
            },
            "administrative_area_level_5": {
              "type": "string",
              "description": "An extra administrative level, depends per country / tenant what this means"
            },
            "country": {
              "type": "string",
              "description": "According to ISO 3166-1 alpha-2"
            }
          }
        },
        "bank_account": {
          "type": "object",
          "properties": {
            "iban": {
              "type": "string"
            },
            "bic": {
              "type": "string"
            }
          }
        },
        "blocked": {
          "type": "boolean",
          "description": "Indicates if the user is blocked"
        },
        "blocked_reason": {
          "type": "string",
          "description": "A comment posted during block or unblock"
        },
        "contact": {
          "type": "object",
          "properties": {
            "email": {
              "type": "string"
            },
            "mobile": {
              "type": "string"
            }
          },
          "required": [
            "email"
          ]
        },
        "departments": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "number",
                "description": "Identification number of the department within Beeple"
              },
              "name": {
                "type": "string",
                "description": "Name of the department"
              }
            },
            "required": [
              "id"
            ]
          },
          "description": "List of departments the collaborator belongs to"
        },
        "primary_department_id": {
          "type": "number",
          "description": "The ID of the collaborator's primary department. Will be the id of one of the collaborator's departments"
        },
        "primary_manager_id": {
          "type": "number",
          "description": "The ID of the collaborator's manager. Must be a collaborator that is an admin and has access rights to approve availabilities."
        },
        "profile_properties": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "group": {
                "type": "string",
                "description": "Group of profile properties"
              },
              "profile_property_id": {
                "type": "number",
                "description": "Id of the profile property"
              },
              "name": {
                "type": "string",
                "description": "Name of the profile property"
              },
              "description": {
                "type": "string",
                "description": "Description of the profile property"
              },
              "type": {
                "type": "string",
                "enum": [
                  "boolean",
                  "numeric",
                  "freetext",
                  "freetext_multiline",
                  "list_single_option",
                  "list_multi_option",
                  "date",
                  "time",
                  "datetime",
                  "upload"
                ],
                "description": "Type of content of the profile property"
              },
              "numeric_unit": {
                "type": "string",
                "description": "Unit in which a profile property of type numeric is expressed"
              },
              "value_boolean": {
                "type": "boolean",
                "description": "Value of the profile property.  Filled for type = boolean"
              },
              "value_string": {
                "type": "string",
                "description": "Value of the profile property.  Filled for type = freetext, freetext_multiline or list_single_option"
              },
              "value_list_multi": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Filled for type = list_multi_option"
              },
              "value_date": {
                "type": "string",
                "description": "Value of the profile property. Filled for type = date according to RFC 3339"
              },
              "value_time": {
                "type": "string",
                "description": "Value of the profile property. Filled for type = time according to RFC 3339"
              },
              "value_datetime": {
                "type": "string",
                "description": "Value of the profile property. Filled for type = datetime according to RFC 3339"
              },
              "value_numeric": {
                "type": "number",
                "description": "Value of the profile property.  Filled for type = numeric"
              },
              "value_upload_url": {
                "type": "string",
                "description": "Value (URL) of the profile property. Filled for type = upload"
              },
              "comment": {
                "type": "string",
                "description": "Comment concerning the value of the profile property"
              },
              "expiration_date": {
                "type": "string",
                "description": "Date the value of the profile property expires according to RFC 3339"
              },
              "piece_of_evidence": {
                "type": "string",
                "description": "Piece of evidence (URL) for the value of the profile property"
              }
            }
          }
        }
      },
      "required": [
        "first_name",
        "last_name",
        "prefix",
        "beeple_id",
        "language",
        "primary_department_id",
        "primary_manager_id"
      ]
    }
  }
}
Response  200

Modify a collaborator
PATCH/collaborators

Example URI

PATCH /collaborators
Request
HideShow
Headers
Content-Type: application/json
Body
{
  "company": {
    "name": "My company",
    "beeple_id": "273e949a-bb41-4f36-9526-d1d0a8043c91",
    "enterprise_number": "0101010101",
    "payroll_service_id": "5"
  },
  "collaborator": {
    "first_name": "John",
    "last_name": "Doe",
    "prefix": "De",
    "beeple_id": 2403,
    "birth_date": "1995-05-07",
    "birth_city": "Antwerpen",
    "birth_country": "BE",
    "gender": "male",
    "language": "en",
    "nationality": "BE",
    "national_registration_numbers": [
      {
        "country": "BE",
        "number": "95.05.07-997.47"
      }
    ],
    "social_statute": "Arbeider",
    "social_statute_code": "career_pause",
    "home_address": {
      "street1": "Dorpstraat 1",
      "street2": "Bus 1",
      "zip": "2018",
      "city": "Antwerpen",
      "administrative_area_level_1": "Hello, world!",
      "administrative_area_level_2": "Hello, world!",
      "administrative_area_level_3": "Hello, world!",
      "administrative_area_level_4": "Hello, world!",
      "administrative_area_level_5": "Hello, world!",
      "country": "BE"
    },
    "bank_account": {
      "iban": "BE68539007547034",
      "bic": "HBKABE22"
    },
    "blocked": false,
    "blocked_reason": "nothing to say",
    "contact": {
      "email": "john.doe@example.org",
      "mobile": "+32498525251"
    },
    "departments": [
      {
        "id": 2403,
        "name": "Accounting"
      }
    ],
    "primary_department_id": 7487,
    "primary_manager_id": 122,
    "profile_properties": [
      {
        "group": "Legal information",
        "profile_property_id": 1888,
        "name": "Marital status",
        "description": "Here you can enter your official marital status",
        "type": "boolean",
        "numeric_unit": "km",
        "value_boolean": true,
        "value_string": "Married",
        "value_list_multi": [
          "english"
        ],
        "value_date": "2017-05-08",
        "value_time": "17:00:00.000+02:00",
        "value_datetime": "2017-05-08T17:00:00.000+02:00",
        "value_numeric": 23.5,
        "value_upload_url": "https://planning.tenant.be/api/v1/uploads/volunteers/volunteers_profile_property/upload_collaborator/5916/uploaded_file.docx",
        "comment": "Since 15/5/1995",
        "expiration_date": "2017-05-08",
        "piece_of_evidence": "https://planning.tenant.be/api/v1/uploads/volunteers/volunteers_profile_property/documented_proof_verified/43413/piece_of_evidence_file.docx"
      }
    ]
  }
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "company": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the company (tenant). Can change and is mainly for displaying purposes"
        },
        "beeple_id": {
          "type": "string",
          "description": "The ID of the Beeple Tenant (a UUID). Will never change for a given tenant."
        },
        "enterprise_number": {
          "type": "string",
          "description": "Enterprise number of this company"
        },
        "payroll_service_id": {
          "type": "string",
          "description": "A payroll service ID."
        }
      },
      "required": [
        "name",
        "beeple_id"
      ],
      "description": "Company that is sending this information."
    },
    "collaborator": {
      "type": "object",
      "properties": {
        "first_name": {
          "type": "string",
          "description": "First name"
        },
        "last_name": {
          "type": "string",
          "description": "Last name"
        },
        "prefix": {
          "type": "string",
          "description": "Last name prefix, this is what appears on the screen of the web application as \"infix\"; for example John De Doe"
        },
        "beeple_id": {
          "type": "number",
          "description": "Identification number within Beeple"
        },
        "birth_date": {
          "type": "string",
          "description": "Birth date according RFC 3339"
        },
        "birth_city": {
          "type": "string",
          "description": "Birth city"
        },
        "birth_country": {
          "type": "string",
          "description": "Birth country according to ISO 3166-1 alpha-2"
        },
        "gender": {
          "type": "string",
          "enum": [
            "male",
            "female"
          ],
          "description": "Gender"
        },
        "language": {
          "type": "string",
          "description": "Language in which to communicate with the collaborator according to ISO 639-1"
        },
        "nationality": {
          "type": "string",
          "description": "According to ISO 3166-1 alpha-2"
        },
        "national_registration_numbers": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "country": {
                "type": "string",
                "description": "Country for which the number is valid according to ISO 3166-1 alpha-2"
              },
              "number": {
                "type": "string"
              }
            }
          }
        },
        "social_statute": {
          "type": "string",
          "description": "The social statute"
        },
        "social_statute_code": {
          "type": "string",
          "enum": [
            "career_pause",
            "disabled_entrepreneur",
            "early_retired",
            "entrepreneur",
            "flexijobs",
            "functionary",
            "incapacitated",
            "living_wager",
            "retired",
            "student",
            "unemployed",
            "unemployed_waiting_period",
            "unknown",
            "working_class",
            "working_class_blue_collar",
            "work_student"
          ],
          "description": "The social statute"
        },
        "home_address": {
          "type": "object",
          "properties": {
            "street1": {
              "type": "string",
              "description": "Street + house number"
            },
            "street2": {
              "type": "string",
              "description": "Extension of street1"
            },
            "zip": {
              "type": "string"
            },
            "city": {
              "type": "string"
            },
            "administrative_area_level_1": {
              "type": "string",
              "description": "An extra administrative level, depends per country / tenant what this means"
            },
            "administrative_area_level_2": {
              "type": "string",
              "description": "An extra administrative level, depends per country / tenant what this means"
            },
            "administrative_area_level_3": {
              "type": "string",
              "description": "An extra administrative level, depends per country / tenant what this means"
            },
            "administrative_area_level_4": {
              "type": "string",
              "description": "An extra administrative level, depends per country / tenant what this means"
            },
            "administrative_area_level_5": {
              "type": "string",
              "description": "An extra administrative level, depends per country / tenant what this means"
            },
            "country": {
              "type": "string",
              "description": "According to ISO 3166-1 alpha-2"
            }
          }
        },
        "bank_account": {
          "type": "object",
          "properties": {
            "iban": {
              "type": "string"
            },
            "bic": {
              "type": "string"
            }
          }
        },
        "blocked": {
          "type": "boolean",
          "description": "Indicates if the user is blocked"
        },
        "blocked_reason": {
          "type": "string",
          "description": "A comment posted during block or unblock"
        },
        "contact": {
          "type": "object",
          "properties": {
            "email": {
              "type": "string"
            },
            "mobile": {
              "type": "string"
            }
          },
          "required": [
            "email"
          ]
        },
        "departments": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "number",
                "description": "Identification number of the department within Beeple"
              },
              "name": {
                "type": "string",
                "description": "Name of the department"
              }
            },
            "required": [
              "id"
            ]
          },
          "description": "List of departments the collaborator belongs to"
        },
        "primary_department_id": {
          "type": "number",
          "description": "The ID of the collaborator's primary department. Will be the id of one of the collaborator's departments"
        },
        "primary_manager_id": {
          "type": "number",
          "description": "The ID of the collaborator's manager. Must be a collaborator that is an admin and has access rights to approve availabilities."
        },
        "profile_properties": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "group": {
                "type": "string",
                "description": "Group of profile properties"
              },
              "profile_property_id": {
                "type": "number",
                "description": "Id of the profile property"
              },
              "name": {
                "type": "string",
                "description": "Name of the profile property"
              },
              "description": {
                "type": "string",
                "description": "Description of the profile property"
              },
              "type": {
                "type": "string",
                "enum": [
                  "boolean",
                  "numeric",
                  "freetext",
                  "freetext_multiline",
                  "list_single_option",
                  "list_multi_option",
                  "date",
                  "time",
                  "datetime",
                  "upload"
                ],
                "description": "Type of content of the profile property"
              },
              "numeric_unit": {
                "type": "string",
                "description": "Unit in which a profile property of type numeric is expressed"
              },
              "value_boolean": {
                "type": "boolean",
                "description": "Value of the profile property.  Filled for type = boolean"
              },
              "value_string": {
                "type": "string",
                "description": "Value of the profile property.  Filled for type = freetext, freetext_multiline or list_single_option"
              },
              "value_list_multi": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Filled for type = list_multi_option"
              },
              "value_date": {
                "type": "string",
                "description": "Value of the profile property. Filled for type = date according to RFC 3339"
              },
              "value_time": {
                "type": "string",
                "description": "Value of the profile property. Filled for type = time according to RFC 3339"
              },
              "value_datetime": {
                "type": "string",
                "description": "Value of the profile property. Filled for type = datetime according to RFC 3339"
              },
              "value_numeric": {
                "type": "number",
                "description": "Value of the profile property.  Filled for type = numeric"
              },
              "value_upload_url": {
                "type": "string",
                "description": "Value (URL) of the profile property. Filled for type = upload"
              },
              "comment": {
                "type": "string",
                "description": "Comment concerning the value of the profile property"
              },
              "expiration_date": {
                "type": "string",
                "description": "Date the value of the profile property expires according to RFC 3339"
              },
              "piece_of_evidence": {
                "type": "string",
                "description": "Piece of evidence (URL) for the value of the profile property"
              }
            }
          }
        }
      },
      "required": [
        "first_name",
        "last_name",
        "prefix",
        "beeple_id",
        "language",
        "primary_department_id",
        "primary_manager_id"
      ]
    }
  }
}
Response  200

SMS Messages

SMS Messages

This webhook is sent every time an SMS is to be sent within Beeple.

This can be used for 2 use cases. The main use case is to actually deliver the SMS. In this case the webhook needs to be installed by a marketplace extension of type communication-channel::sms. After sending the SMS the extension should return a unique ID of the SMS which later can be reused to query or set the delivery status of the SMS. The other use case is to register the request to send an SMS within Beeple. In this case no information needs to be returned.

Sending a message
POST/communication/sms

Example URI

POST /communication/sms
Request
HideShow
Headers
Content-Type: application/json
Body
{
  "tenant_id": "237a3384-227b-4437-8585-39f4f4f7dfd4",
  "collaborator_id": "7454",
  "msisdn": "32498123456",
  "message": "Hello, world!"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "tenant_id": {
      "type": "string",
      "description": "The identifier of the tenant"
    },
    "collaborator_id": {
      "type": "string",
      "description": "The collaborator ID in beeple."
    },
    "msisdn": {
      "type": "string",
      "description": "The mobile phone number of the recipient"
    },
    "message": {
      "type": "string",
      "description": "The body of the SMS. This will be sent as normal UTF-8,\n\n        it is up to the implementation to make sure the message is\n        correctly sent to the users"
    }
  }
}
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "message_id": "dfdasgcvdfgfg",
  "cost": 2
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "message_id": {
      "type": "string",
      "description": "A unique ID to track status of delivery"
    },
    "cost": {
      "type": "number",
      "description": "The cost of the message in credits"
    }
  }
}
Response  200
HideShow
Headers
Content-Type: application/json

SMS Message statuses

Technically this is not a webhook from Beeple. This describes a call from the 3rd party marketplace extension to Beeple.

This message can be sent to update the status. It is up to the implementation to decide to implement this callback and for which statuses.

Updating status of a message
PATCH/api/v1/incoming/communications/{message_id}

Example URI

PATCH /api/v1/incoming/communications/dfdasgcvdfgfg
URI Parameters
HideShow
message_id
string (required) Example: dfdasgcvdfgfg

The ID of the message. This is the same ID as was sent by the 3rd party market place extension after sending the SMS.

Request
HideShow
Headers
Content-Type: application/json
Body
{
  "status": "sent"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "sent",
        "failed",
        "delivered",
        "opened"
      ],
      "description": "The new status of the message"
    }
  }
}
Response  200
HideShow
Headers
Content-Type: application/json

Happenings

Happening

This webhook is sent every time a Happening is created/deleted/updated within Beeple

Create a Happening
POST/happenings

Example URI

POST /happenings
Request
HideShow
Headers
Content-Type: application/json
Body
{
  "company": {
    "name": "My company",
    "beeple_id": "273e949a-bb41-4f36-9526-d1d0a8043c91",
    "enterprise_number": "0101010101"
  },
  "project": {
    "id": "2244",
    "name": "Example Project",
    "description": "Description of example project",
    "start_date": "2017-08-15",
    "end_date": "2017-09-15",
    "published": true,
    "practical_info": "Some practical info",
    "subprojects_enabled": true,
    "customer_id": "5",
    "department_id": "5",
    "custom_fields": [
      {
        "property_id": "2244",
        "text_value": "A house in the middle of a street",
        "numeric_value": 32212
      }
    ]
  }
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "company": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the company (tenant). Can change and is mainly for displaying purposes"
        },
        "beeple_id": {
          "type": "string",
          "description": "The ID of the Beeple Tenant (a UUID). Will never change for a given tenant."
        },
        "enterprise_number": {
          "type": "string",
          "description": "Enterprise number of this company"
        }
      },
      "required": [
        "name",
        "beeple_id"
      ],
      "description": "Company that is sending this information."
    },
    "project": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "The ID of the project"
        },
        "name": {
          "type": "string",
          "description": "The name of the project (max 255 characters)"
        },
        "description": {
          "type": "string",
          "description": "A description of the project"
        },
        "start_date": {
          "type": "string",
          "description": "Start date of the project in YYYY-MM-DD"
        },
        "end_date": {
          "type": "string",
          "description": "End date of the project in YYYY-MM-DD"
        },
        "published": {
          "type": "boolean",
          "description": "Indication whether the project is published"
        },
        "practical_info": {
          "type": "string",
          "description": "Text to describe some practical info"
        },
        "subprojects_enabled": {
          "type": "boolean",
          "description": "This allows the project to have subprojects"
        },
        "customer_id": {
          "type": "string",
          "description": "The ID of the customer of the Beeple tenant. If Beeple is configured to not use customers this will be unnecessary information and ignored"
        },
        "department_id": {
          "type": "string",
          "description": "The ID of the department of the Beeple tenant that executes the project. If Beeple is configured to not use departments this will be unnecessary information and ignored"
        },
        "custom_fields": {
          "type": "array",
          "description": "A list of extra custom planning fields."
        }
      },
      "required": [
        "id",
        "name",
        "description",
        "start_date",
        "end_date",
        "published",
        "subprojects_enabled"
      ],
      "description": "Details of the project"
    }
  }
}
Response  200

Modify a Happening
PATCH/happenings

Example URI

PATCH /happenings
Request
HideShow
Headers
Content-Type: application/json
Body
{
  "company": {
    "name": "My company",
    "beeple_id": "273e949a-bb41-4f36-9526-d1d0a8043c91",
    "enterprise_number": "0101010101"
  },
  "project": {
    "id": "2244",
    "name": "Example Project",
    "description": "Description of example project",
    "start_date": "2017-08-15",
    "end_date": "2017-09-15",
    "published": true,
    "practical_info": "Some practical info",
    "subprojects_enabled": true,
    "customer_id": "5",
    "department_id": "5",
    "custom_fields": [
      {
        "property_id": "2244",
        "text_value": "A house in the middle of a street",
        "numeric_value": 32212
      }
    ]
  }
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "company": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the company (tenant). Can change and is mainly for displaying purposes"
        },
        "beeple_id": {
          "type": "string",
          "description": "The ID of the Beeple Tenant (a UUID). Will never change for a given tenant."
        },
        "enterprise_number": {
          "type": "string",
          "description": "Enterprise number of this company"
        }
      },
      "required": [
        "name",
        "beeple_id"
      ],
      "description": "Company that is sending this information."
    },
    "project": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "The ID of the project"
        },
        "name": {
          "type": "string",
          "description": "The name of the project (max 255 characters)"
        },
        "description": {
          "type": "string",
          "description": "A description of the project"
        },
        "start_date": {
          "type": "string",
          "description": "Start date of the project in YYYY-MM-DD"
        },
        "end_date": {
          "type": "string",
          "description": "End date of the project in YYYY-MM-DD"
        },
        "published": {
          "type": "boolean",
          "description": "Indication whether the project is published"
        },
        "practical_info": {
          "type": "string",
          "description": "Text to describe some practical info"
        },
        "subprojects_enabled": {
          "type": "boolean",
          "description": "This allows the project to have subprojects"
        },
        "customer_id": {
          "type": "string",
          "description": "The ID of the customer of the Beeple tenant. If Beeple is configured to not use customers this will be unnecessary information and ignored"
        },
        "department_id": {
          "type": "string",
          "description": "The ID of the department of the Beeple tenant that executes the project. If Beeple is configured to not use departments this will be unnecessary information and ignored"
        },
        "custom_fields": {
          "type": "array",
          "description": "A list of extra custom planning fields."
        }
      },
      "required": [
        "id",
        "name",
        "description",
        "start_date",
        "end_date",
        "published",
        "subprojects_enabled"
      ],
      "description": "Details of the project"
    }
  }
}
Response  200

Delete a Happening
DELETE/happenings

Example URI

DELETE /happenings
Request
HideShow
Headers
Content-Type: application/json
Body
{
  "id": "2244",
  "updated": "2019-04-01T00:23:59.000+00:00"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The ID of the project that was removed"
    },
    "updated": {
      "type": "string",
      "description": "Date and time when the project was removed"
    }
  },
  "required": [
    "id",
    "updated"
  ]
}
Response  200

Enrolments

Enrolments

This webhook is sent every time an enrolment is created/cancelled/updated within Beeple.

Create an enrolment
POST/enrolments

Example URI

POST /enrolments
Request
HideShow
Headers
Content-Type: application/json
Body
{
  "company": {
    "name": "My company",
    "beeple_id": "273e949a-bb41-4f36-9526-d1d0a8043c91",
    "enterprise_number": "0101010101",
    "payroll_service_id": "5"
  },
  "enrolment": {
    "beeple_id": 3,
    "first_name": "John",
    "last_name": "Doe",
    "email": "John-doe@example.com"
  },
  "subproject": {
    "beeple_id": 3,
    "name": "test"
  },
  "team": {
    "beeple_id": 3,
    "name": "test"
  },
  "department": {
    "beeple_id": "3",
    "name": "test"
  },
  "planned_shifts": [
    {
      "start_datetime": "2017-07-05T15:30Z",
      "end_datetime": "2017-07-05T21:30Z",
      "break_duration": "00:30"
    }
  ],
  "work_station_address": {
    "beeple_id": "3",
    "street1": "stationstraat",
    "street2": "1",
    "zip": 2000,
    "city": "Antwerpen",
    "country": "BE",
    "addition": 2000
  },
  "function": {
    "beeple_id": 3,
    "name": "test"
  },
  "contract_type": "interim",
  "wages": {
    "per_hour": 10,
    "per_day": 80,
    "per_team": 10
  },
  "wage_scale": "Per age",
  "commute_distance_in_km": 1,
  "created": "2017-09-07T11:06:56.300Z",
  "updated": "2017-09-07T11:06:56.300Z"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "company": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the company (tenant). Can change and is mainly for displaying purposes"
        },
        "beeple_id": {
          "type": "string",
          "description": "The ID of the Beeple Tenant (a UUID). Will never change for a given tenant."
        },
        "enterprise_number": {
          "type": "string",
          "description": "Enterprise number of this company"
        },
        "payroll_service_id": {
          "type": "string",
          "description": "A payroll service ID."
        }
      },
      "required": [
        "name",
        "beeple_id"
      ],
      "description": "Company that is sending this information."
    },
    "enrolment": {
      "type": "object",
      "properties": {
        "beeple_id": {
          "type": "number",
          "description": "Collaborator ID"
        },
        "first_name": {
          "type": "string",
          "description": "First name"
        },
        "last_name": {
          "type": "string",
          "description": "Last name"
        },
        "email": {
          "type": "string",
          "description": "Email"
        }
      },
      "required": [
        "beeple_id",
        "first_name",
        "last_name"
      ]
    },
    "subproject": {
      "type": "object",
      "properties": {
        "beeple_id": {
          "type": "number",
          "description": "Subproject ID"
        },
        "name": {
          "type": "string",
          "description": "Name"
        }
      },
      "required": [
        "beeple_id"
      ]
    },
    "team": {
      "type": "object",
      "properties": {
        "beeple_id": {
          "type": "number",
          "description": "Team ID"
        },
        "name": {
          "type": "string",
          "description": "Name"
        }
      },
      "required": [
        "beeple_id"
      ]
    },
    "department": {
      "type": "object",
      "properties": {
        "beeple_id": {
          "type": "string",
          "description": "Department ID"
        },
        "name": {
          "type": "string",
          "description": "Name"
        }
      },
      "required": [
        "beeple_id"
      ]
    },
    "planned_shifts": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "start_datetime": {
            "type": "string",
            "description": "When the shift starts according RFC 3339."
          },
          "end_datetime": {
            "type": "string",
            "description": "When the shift stops according RFC 3339."
          },
          "break_duration": {
            "type": "string",
            "description": "Total planned break duration in HH:MM."
          }
        }
      }
    },
    "work_station_address": {
      "type": "object",
      "properties": {
        "beeple_id": {
          "type": "string",
          "description": "Address ID"
        },
        "street1": {
          "type": "string",
          "description": "Street + house number"
        },
        "street2": {
          "type": "string",
          "description": "Extension of street1"
        },
        "zip": {
          "type": "number"
        },
        "city": {
          "type": "string"
        },
        "country": {
          "type": "string",
          "description": "According to ISO 3166-1 alpha-2"
        },
        "addition": {
          "type": "number",
          "description": "Additional information about the work station"
        }
      },
      "required": [
        "beeple_id",
        "street1",
        "street2",
        "zip",
        "city",
        "country",
        "addition"
      ]
    },
    "function": {
      "type": "object",
      "properties": {
        "beeple_id": {
          "type": "number",
          "description": "Function ID"
        },
        "name": {
          "type": "string",
          "description": "Name"
        }
      },
      "required": [
        "beeple_id"
      ]
    },
    "contract_type": {
      "type": "string",
      "description": "Contract type"
    },
    "wages": {
      "type": "object",
      "properties": {
        "per_hour": {
          "type": "number",
          "description": "Compensation per hour"
        },
        "per_day": {
          "type": "number",
          "description": "Compensation per day"
        },
        "per_team": {
          "type": "number",
          "description": "Compensation per team"
        }
      }
    },
    "wage_scale": {
      "type": "string",
      "description": "Wage scale code"
    },
    "commute_distance_in_km": {
      "type": "number",
      "description": "Commute distance in km"
    },
    "created": {
      "type": "string",
      "description": "Created at timestamp according RFC 3339"
    },
    "updated": {
      "type": "string",
      "description": "Updated at timestamp according RFC 3339"
    }
  },
  "required": [
    "contract_type"
  ]
}
Response  200

Remove an enrolment
DELETE/enrolments

Example URI

DELETE /enrolments
Request
HideShow
Headers
Content-Type: application/json
Body
{
  "company": {
    "name": "My company",
    "beeple_id": "273e949a-bb41-4f36-9526-d1d0a8043c91",
    "enterprise_number": "0101010101",
    "payroll_service_id": "5"
  },
  "enrolment": {
    "beeple_id": 3,
    "first_name": "John",
    "last_name": "Doe",
    "email": "John-doe@example.com"
  },
  "subproject": {
    "beeple_id": 3,
    "name": "test"
  },
  "team": {
    "beeple_id": 3,
    "name": "test"
  },
  "department": {
    "beeple_id": "3",
    "name": "test"
  },
  "planned_shifts": [
    {
      "start_datetime": "2017-07-05T15:30Z",
      "end_datetime": "2017-07-05T21:30Z",
      "break_duration": "00:30"
    }
  ],
  "work_station_address": {
    "beeple_id": "3",
    "street1": "stationstraat",
    "street2": "1",
    "zip": 2000,
    "city": "Antwerpen",
    "country": "BE",
    "addition": 2000
  },
  "function": {
    "beeple_id": 3,
    "name": "test"
  },
  "contract_type": "interim",
  "wages": {
    "per_hour": 10,
    "per_day": 80,
    "per_team": 10
  },
  "wage_scale": "Per age",
  "commute_distance_in_km": 1,
  "created": "2017-09-07T11:06:56.300Z",
  "updated": "2017-09-07T11:06:56.300Z"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "company": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the company (tenant). Can change and is mainly for displaying purposes"
        },
        "beeple_id": {
          "type": "string",
          "description": "The ID of the Beeple Tenant (a UUID). Will never change for a given tenant."
        },
        "enterprise_number": {
          "type": "string",
          "description": "Enterprise number of this company"
        },
        "payroll_service_id": {
          "type": "string",
          "description": "A payroll service ID."
        }
      },
      "required": [
        "name",
        "beeple_id"
      ],
      "description": "Company that is sending this information."
    },
    "enrolment": {
      "type": "object",
      "properties": {
        "beeple_id": {
          "type": "number",
          "description": "Collaborator ID"
        },
        "first_name": {
          "type": "string",
          "description": "First name"
        },
        "last_name": {
          "type": "string",
          "description": "Last name"
        },
        "email": {
          "type": "string",
          "description": "Email"
        }
      },
      "required": [
        "beeple_id",
        "first_name",
        "last_name"
      ]
    },
    "subproject": {
      "type": "object",
      "properties": {
        "beeple_id": {
          "type": "number",
          "description": "Subproject ID"
        },
        "name": {
          "type": "string",
          "description": "Name"
        }
      },
      "required": [
        "beeple_id"
      ]
    },
    "team": {
      "type": "object",
      "properties": {
        "beeple_id": {
          "type": "number",
          "description": "Team ID"
        },
        "name": {
          "type": "string",
          "description": "Name"
        }
      },
      "required": [
        "beeple_id"
      ]
    },
    "department": {
      "type": "object",
      "properties": {
        "beeple_id": {
          "type": "string",
          "description": "Department ID"
        },
        "name": {
          "type": "string",
          "description": "Name"
        }
      },
      "required": [
        "beeple_id"
      ]
    },
    "planned_shifts": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "start_datetime": {
            "type": "string",
            "description": "When the shift starts according RFC 3339."
          },
          "end_datetime": {
            "type": "string",
            "description": "When the shift stops according RFC 3339."
          },
          "break_duration": {
            "type": "string",
            "description": "Total planned break duration in HH:MM."
          }
        }
      }
    },
    "work_station_address": {
      "type": "object",
      "properties": {
        "beeple_id": {
          "type": "string",
          "description": "Address ID"
        },
        "street1": {
          "type": "string",
          "description": "Street + house number"
        },
        "street2": {
          "type": "string",
          "description": "Extension of street1"
        },
        "zip": {
          "type": "number"
        },
        "city": {
          "type": "string"
        },
        "country": {
          "type": "string",
          "description": "According to ISO 3166-1 alpha-2"
        },
        "addition": {
          "type": "number",
          "description": "Additional information about the work station"
        }
      },
      "required": [
        "beeple_id",
        "street1",
        "street2",
        "zip",
        "city",
        "country",
        "addition"
      ]
    },
    "function": {
      "type": "object",
      "properties": {
        "beeple_id": {
          "type": "number",
          "description": "Function ID"
        },
        "name": {
          "type": "string",
          "description": "Name"
        }
      },
      "required": [
        "beeple_id"
      ]
    },
    "contract_type": {
      "type": "string",
      "description": "Contract type"
    },
    "wages": {
      "type": "object",
      "properties": {
        "per_hour": {
          "type": "number",
          "description": "Compensation per hour"
        },
        "per_day": {
          "type": "number",
          "description": "Compensation per day"
        },
        "per_team": {
          "type": "number",
          "description": "Compensation per team"
        }
      }
    },
    "wage_scale": {
      "type": "string",
      "description": "Wage scale code"
    },
    "commute_distance_in_km": {
      "type": "number",
      "description": "Commute distance in km"
    },
    "created": {
      "type": "string",
      "description": "Created at timestamp according RFC 3339"
    },
    "updated": {
      "type": "string",
      "description": "Updated at timestamp according RFC 3339"
    }
  },
  "required": [
    "contract_type"
  ]
}
Response  200

Modify an enrolment
PATCH/enrolments

Example URI

PATCH /enrolments
Request
HideShow
Headers
Content-Type: application/json
Body
{
  "company": {
    "name": "My company",
    "beeple_id": "273e949a-bb41-4f36-9526-d1d0a8043c91",
    "enterprise_number": "0101010101",
    "payroll_service_id": "5"
  },
  "enrolment": {
    "beeple_id": 3,
    "first_name": "John",
    "last_name": "Doe",
    "email": "John-doe@example.com"
  },
  "subproject": {
    "beeple_id": 3,
    "name": "test"
  },
  "team": {
    "beeple_id": 3,
    "name": "test"
  },
  "department": {
    "beeple_id": "3",
    "name": "test"
  },
  "planned_shifts": [
    {
      "start_datetime": "2017-07-05T15:30Z",
      "end_datetime": "2017-07-05T21:30Z",
      "break_duration": "00:30"
    }
  ],
  "work_station_address": {
    "beeple_id": "3",
    "street1": "stationstraat",
    "street2": "1",
    "zip": 2000,
    "city": "Antwerpen",
    "country": "BE",
    "addition": 2000
  },
  "function": {
    "beeple_id": 3,
    "name": "test"
  },
  "contract_type": "interim",
  "wages": {
    "per_hour": 10,
    "per_day": 80,
    "per_team": 10
  },
  "wage_scale": "Per age",
  "commute_distance_in_km": 1,
  "created": "2017-09-07T11:06:56.300Z",
  "updated": "2017-09-07T11:06:56.300Z"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "company": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the company (tenant). Can change and is mainly for displaying purposes"
        },
        "beeple_id": {
          "type": "string",
          "description": "The ID of the Beeple Tenant (a UUID). Will never change for a given tenant."
        },
        "enterprise_number": {
          "type": "string",
          "description": "Enterprise number of this company"
        },
        "payroll_service_id": {
          "type": "string",
          "description": "A payroll service ID."
        }
      },
      "required": [
        "name",
        "beeple_id"
      ],
      "description": "Company that is sending this information."
    },
    "enrolment": {
      "type": "object",
      "properties": {
        "beeple_id": {
          "type": "number",
          "description": "Collaborator ID"
        },
        "first_name": {
          "type": "string",
          "description": "First name"
        },
        "last_name": {
          "type": "string",
          "description": "Last name"
        },
        "email": {
          "type": "string",
          "description": "Email"
        }
      },
      "required": [
        "beeple_id",
        "first_name",
        "last_name"
      ]
    },
    "subproject": {
      "type": "object",
      "properties": {
        "beeple_id": {
          "type": "number",
          "description": "Subproject ID"
        },
        "name": {
          "type": "string",
          "description": "Name"
        }
      },
      "required": [
        "beeple_id"
      ]
    },
    "team": {
      "type": "object",
      "properties": {
        "beeple_id": {
          "type": "number",
          "description": "Team ID"
        },
        "name": {
          "type": "string",
          "description": "Name"
        }
      },
      "required": [
        "beeple_id"
      ]
    },
    "department": {
      "type": "object",
      "properties": {
        "beeple_id": {
          "type": "string",
          "description": "Department ID"
        },
        "name": {
          "type": "string",
          "description": "Name"
        }
      },
      "required": [
        "beeple_id"
      ]
    },
    "planned_shifts": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "start_datetime": {
            "type": "string",
            "description": "When the shift starts according RFC 3339."
          },
          "end_datetime": {
            "type": "string",
            "description": "When the shift stops according RFC 3339."
          },
          "break_duration": {
            "type": "string",
            "description": "Total planned break duration in HH:MM."
          }
        }
      }
    },
    "work_station_address": {
      "type": "object",
      "properties": {
        "beeple_id": {
          "type": "string",
          "description": "Address ID"
        },
        "street1": {
          "type": "string",
          "description": "Street + house number"
        },
        "street2": {
          "type": "string",
          "description": "Extension of street1"
        },
        "zip": {
          "type": "number"
        },
        "city": {
          "type": "string"
        },
        "country": {
          "type": "string",
          "description": "According to ISO 3166-1 alpha-2"
        },
        "addition": {
          "type": "number",
          "description": "Additional information about the work station"
        }
      },
      "required": [
        "beeple_id",
        "street1",
        "street2",
        "zip",
        "city",
        "country",
        "addition"
      ]
    },
    "function": {
      "type": "object",
      "properties": {
        "beeple_id": {
          "type": "number",
          "description": "Function ID"
        },
        "name": {
          "type": "string",
          "description": "Name"
        }
      },
      "required": [
        "beeple_id"
      ]
    },
    "contract_type": {
      "type": "string",
      "description": "Contract type"
    },
    "wages": {
      "type": "object",
      "properties": {
        "per_hour": {
          "type": "number",
          "description": "Compensation per hour"
        },
        "per_day": {
          "type": "number",
          "description": "Compensation per day"
        },
        "per_team": {
          "type": "number",
          "description": "Compensation per team"
        }
      }
    },
    "wage_scale": {
      "type": "string",
      "description": "Wage scale code"
    },
    "commute_distance_in_km": {
      "type": "number",
      "description": "Commute distance in km"
    },
    "created": {
      "type": "string",
      "description": "Created at timestamp according RFC 3339"
    },
    "updated": {
      "type": "string",
      "description": "Updated at timestamp according RFC 3339"
    }
  },
  "required": [
    "contract_type"
  ]
}
Response  200

Worked Hours

Hour registration

This webhook is sent every time an hour registration is approved within Beeple.

Register hours
PATCH/worked_hours

Example URI

PATCH /worked_hours
Request
HideShow
Headers
Content-Type: application/json
Body
{
  "company": {
    "name": "My company",
    "beeple_id": "273e949a-bb41-4f36-9526-d1d0a8043c91",
    "enterprise_number": "0101010101",
    "payroll_service_id": "5"
  },
  "contract": {
    "company": {
      "name": "My company",
      "beeple_id": "273e949a-bb41-4f36-9526-d1d0a8043c91",
      "enterprise_number": "0101010101",
      "payroll_service_id": "5"
    },
    "beeple_id": 87643,
    "external_id": "C197654",
    "collaborator": {
      "beeple_id": 2403,
      "external_id": "P77881"
    }
  },
  "worked_hours": {
    "code": "other",
    "start": "2017-04-01T10:10:00.000+02:00",
    "end": "2017-04-01T19:05:00.000+02:00",
    "duration": "08:55",
    "break_duration": "00:30",
    "work_duration": "08:25",
    "remark": "Reviewed by Adam and approved by Betsy",
    "absent": false,
    "absence_reason": "Illness",
    "confirmed_at": "2017-04-01T10:10:00.000+02:00"
  }
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "company": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the company (tenant). Can change and is mainly for displaying purposes"
        },
        "beeple_id": {
          "type": "string",
          "description": "The ID of the Beeple Tenant (a UUID). Will never change for a given tenant."
        },
        "enterprise_number": {
          "type": "string",
          "description": "Enterprise number of this company"
        },
        "payroll_service_id": {
          "type": "string",
          "description": "A payroll service ID."
        }
      },
      "required": [
        "name",
        "beeple_id"
      ],
      "description": "Company that is sending this information."
    },
    "contract": {
      "type": "object",
      "properties": {
        "company": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "description": "Name of the company (tenant). Can change and is mainly for displaying purposes"
            },
            "beeple_id": {
              "type": "string",
              "description": "The ID of the Beeple Tenant (a UUID). Will never change for a given tenant."
            },
            "enterprise_number": {
              "type": "string",
              "description": "Enterprise number of this company"
            },
            "payroll_service_id": {
              "type": "string",
              "description": "A payroll service ID."
            }
          },
          "required": [
            "name",
            "beeple_id"
          ],
          "description": "Company that is sending this information."
        },
        "beeple_id": {
          "type": "number",
          "description": "Identification number within Beeple"
        },
        "external_id": {
          "type": "string",
          "description": "Identification in 3rd party system"
        },
        "collaborator": {
          "type": "object",
          "properties": {
            "beeple_id": {
              "type": "number",
              "description": "Identification number within Beeple"
            },
            "external_id": {
              "type": "string",
              "description": "Identification in 3rd party system"
            }
          },
          "required": [
            "beeple_id",
            "external_id"
          ],
          "description": "Collaborator of the contract"
        }
      },
      "required": [
        "beeple_id",
        "external_id"
      ],
      "description": "Contract for which worked hours are reported"
    }
  },
  "oneOf": [
    {
      "properties": {
        "worked_hours": {
          "type": "object",
          "properties": {
            "code": {
              "type": "string",
              "enum": [
                "other",
                "collaborator",
                "planned"
              ],
              "description": "Which hours are approved."
            },
            "start": {
              "type": "string",
              "description": "When the collaborator started working for the reported shift according RFC 3339."
            },
            "end": {
              "type": "string",
              "description": "When the collaborator stopped working for the reported shift according RFC 3339."
            },
            "duration": {
              "type": "string",
              "description": "How long the collaborator was present in the reported shift according RFC 3339."
            },
            "break_duration": {
              "type": "string",
              "description": "How long the collaborator didn't to work in the reported shift according RFC 3339. Can be 00:00."
            },
            "work_duration": {
              "type": "string",
              "description": "How long the collaborator worked in the reported shift according RFC 3339. Can be 00:00."
            },
            "remark": {
              "type": "string",
              "description": "Any remarks saved with the worked hour"
            },
            "absent": {
              "type": "boolean",
              "description": "true if the collaborator was absent, false otherwise"
            },
            "absence_reason": {
              "type": "string",
              "description": "The reason of the absence as a string. Can be empty string."
            },
            "confirmed_at": {
              "type": "string",
              "description": "When the worked hour was confirmed according RFC 3339."
            }
          },
          "required": [
            "start",
            "end",
            "duration",
            "break_duration"
          ],
          "description": "Sent regardless of the collaborator being absent"
        }
      }
    },
    {
      "properties": {
        "absence_reason": {
          "type": "object",
          "properties": {
            "description": {
              "type": "string",
              "description": "The absence reason description"
            },
            "code": {
              "type": "string",
              "description": "The code assigned for the absence reason for this payroll integration"
            }
          },
          "description": "Only sent if collaborator was absent"
        }
      }
    }
  ]
}
Response  200

Availabilities

Availability

This webhook is sent every time a availability is created/deleted/updated within Beeple

Create a availability
POST/availabilities

Example URI

POST /availabilities
Request
HideShow
Headers
Content-Type: application/json
Body
{
  "id": "1",
  "beeple_id": "1025",
  "day_part_id": "1",
  "availability_type_id": "1",
  "start": "2017-04-01T06:00:00",
  "end": "2017-04-01T14:00:00",
  "start_time": "06:00",
  "end_time": "14:00",
  "available": true,
  "id_availability_type": "5",
  "name": "Holiday",
  "description": "Holiday",
  "remark": "Comment",
  "requested_at": "2017-01-01T14:35:25",
  "requested_by": "1625",
  "confirmed_at": "2017-01-01T18:35:25",
  "status": "approved",
  "approved_by": "1665",
  "beeple_approval_status": "approved",
  "payroll_approval_status": "approved",
  "pieces_of_evidence array[PieceOfEvidence]": "Hello, world!"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The ID of the collaborator availability"
    },
    "beeple_id": {
      "type": "string",
      "description": "Collaborator ID of the person (un)available"
    },
    "day_part_id": {
      "type": "string",
      "description": "The id of a Day Part"
    },
    "availability_type_id": {
      "type": "string",
      "description": "The id of the Availability Type associated with this collaborator availability"
    },
    "start": {
      "type": "string",
      "description": "The start time"
    },
    "end": {
      "type": "string",
      "description": "The end time"
    },
    "start_time": {
      "type": "string",
      "description": "Time of availability start in HH:MM 24 hour format"
    },
    "end_time": {
      "type": "string",
      "description": "Time of availability end in HH:MM 24 hour format"
    },
    "available": {
      "type": "boolean",
      "description": "If the availability indicates available or unavailable"
    },
    "id_availability_type": {
      "type": "string",
      "description": "The type of Availability ID"
    },
    "name": {
      "type": "string",
      "description": "The name of the availability"
    },
    "description": {
      "type": "string",
      "description": "The description of the availability"
    },
    "remark": {
      "type": "string",
      "description": "A comment/remark given"
    },
    "requested_at": {
      "type": "string",
      "description": "The time of the creation"
    },
    "requested_by": {
      "type": "string",
      "description": "Collaborator ID of the requestor"
    },
    "confirmed_at": {
      "type": "string",
      "description": "The time of the confirmation"
    },
    "status": {
      "type": "string",
      "description": "The status"
    },
    "approved_by": {
      "type": "string",
      "description": "Collaborator ID of the approver"
    },
    "beeple_approval_status": {
      "type": "string",
      "description": "The status for the in-beeple approval"
    },
    "payroll_approval_status": {
      "type": "string",
      "description": "The status for the payroll approval"
    },
    "pieces_of_evidence array[PieceOfEvidence]": {
      "type": "string",
      "description": "Any optional pieces of evidences"
    }
  },
  "required": [
    "id",
    "start_time",
    "end_time"
  ]
}
Response  200

Delete a availability
DELETE/availabilities

Example URI

DELETE /availabilities
Request
HideShow
Headers
Content-Type: application/json
Body
{
  "id": "1234"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "the ID of the availability"
    }
  }
}
Response  200

Modify a availability
PATCH/availabilities

Example URI

PATCH /availabilities
Request
HideShow
Headers
Content-Type: application/json
Body
{
  "id": "1",
  "beeple_id": "1025",
  "day_part_id": "1",
  "availability_type_id": "1",
  "start": "2017-04-01T06:00:00",
  "end": "2017-04-01T14:00:00",
  "start_time": "06:00",
  "end_time": "14:00",
  "available": true,
  "id_availability_type": "5",
  "name": "Holiday",
  "description": "Holiday",
  "remark": "Comment",
  "requested_at": "2017-01-01T14:35:25",
  "requested_by": "1625",
  "confirmed_at": "2017-01-01T18:35:25",
  "status": "approved",
  "approved_by": "1665",
  "beeple_approval_status": "approved",
  "payroll_approval_status": "approved",
  "pieces_of_evidence array[PieceOfEvidence]": "Hello, world!"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The ID of the collaborator availability"
    },
    "beeple_id": {
      "type": "string",
      "description": "Collaborator ID of the person (un)available"
    },
    "day_part_id": {
      "type": "string",
      "description": "The id of a Day Part"
    },
    "availability_type_id": {
      "type": "string",
      "description": "The id of the Availability Type associated with this collaborator availability"
    },
    "start": {
      "type": "string",
      "description": "The start time"
    },
    "end": {
      "type": "string",
      "description": "The end time"
    },
    "start_time": {
      "type": "string",
      "description": "Time of availability start in HH:MM 24 hour format"
    },
    "end_time": {
      "type": "string",
      "description": "Time of availability end in HH:MM 24 hour format"
    },
    "available": {
      "type": "boolean",
      "description": "If the availability indicates available or unavailable"
    },
    "id_availability_type": {
      "type": "string",
      "description": "The type of Availability ID"
    },
    "name": {
      "type": "string",
      "description": "The name of the availability"
    },
    "description": {
      "type": "string",
      "description": "The description of the availability"
    },
    "remark": {
      "type": "string",
      "description": "A comment/remark given"
    },
    "requested_at": {
      "type": "string",
      "description": "The time of the creation"
    },
    "requested_by": {
      "type": "string",
      "description": "Collaborator ID of the requestor"
    },
    "confirmed_at": {
      "type": "string",
      "description": "The time of the confirmation"
    },
    "status": {
      "type": "string",
      "description": "The status"
    },
    "approved_by": {
      "type": "string",
      "description": "Collaborator ID of the approver"
    },
    "beeple_approval_status": {
      "type": "string",
      "description": "The status for the in-beeple approval"
    },
    "payroll_approval_status": {
      "type": "string",
      "description": "The status for the payroll approval"
    },
    "pieces_of_evidence array[PieceOfEvidence]": {
      "type": "string",
      "description": "Any optional pieces of evidences"
    }
  },
  "required": [
    "id",
    "start_time",
    "end_time"
  ]
}
Response  200

Generated by aglio on 04 Dec 2021