Visiba Care - Embassy API

Base URI

https://{countryCode}.visibacare.com/api/embassy/{version}
Base URI variables
countryCode
string required
Examples:
SEGBFI
version
string required
Example:
v1
Parameters
PartnershipId
string required

Your identifier for a partnership you have with a registered licence holder

Pattern:Letters, digits, underscore and hyphen
Example:
My_Partnership_Id
Documentation
Terminology

General

Licence holder: An organization/company that holds Visiba Care licences for its doctors/other resources.

Embassy: This is you. An embassy is, to a licence holder, a trusted third party with which they have established a partnership (see below). The embassy can, amongst other things, register appointments for the licence holders.

Partnership / PartnershipId: This is the connection between an embassy and a licence holder. It is registered with Visiba Care with an identifier freely selected by the embassy. This identifier is used in all API methods that works this with this licence holder.


Appointments

Appointment: A booked appointment with several participants.

Participant: A person that is included in an appointment and can participate in communication.

Authorization

All requests to the Embassy API requires an Authorization header. Before the header can be assembled and added, a HMAC must be calculated from a signature of the request.

Generate a request signature

The HMAC is calculated from a series of values, joined together with the | character into a single string of text. We call this string a request signature. The values of the signature are as follows (in the order they are joined together):

  1. Api key: A unique key assigned to an Embassy API consumer.

  2. HTTP method: GET/POST/PUT/DELETE.

  3. URI: The complete URI of the request, including scheme, host, path and querystring.

  4. Timestamp: Unix timestamp of the time this request was created/sent. It must not differ more than 300 seconds from the Visiba Care server, or the request will be denied. For this reason, NTP synchronization on your server is recommended.

  5. Nonce: A random and unique string, preferably a GUID/UUID. It makes this request unique and not replayable (see http://en.wikipedia.org/wiki/Cryptographic_nonce). Requests with an already used nonce will be denied.

  6. Content hash: A Base64 encoded SHA1 hash of the request body. If there is no body, use an empty string (the encoded result should then be 2jmj7l5rSw0yVb/vlWAYkK/YBwk=).

The complete signature should look like this:

f96fa9b05c5947cbbc870d7c8255f6d8|POST|https://se.visibacare.com/api/Embassy/v1/Appointments|1446723703|983fad75117e4b02937b291d371a8f9e|2jmj7l5rSw0yVb/vlWAYkK/YBwk=

Calculate HMAC from signature

See: http://en.wikipedia.org/wiki/Hash-based_message_authentication_code. To calculate the HMAC from this signature, we recommend that you use an existing HMAC algorithm instead of building your own. The underlying hash algorithm must be SHA256. When calculating the HMAC, your API secret is required.

  • API secret: A secret string value related to your API key (note: you don't need to Base64-decode it before use; use it like any other string)
HMAC example in C# .NET:
using (var hmacAlgorithm = new HMACSHA256(apiSecret.GetBytes()))
{
    var hmac = hmacAlgorithm.ComputeHash(signatureString);
    return hmac;
}
HMAC example in PHP:
$rawHmac = hash_hmac('sha256', $signatureString, $apiSecret, true);
$hmac = base64_encode($rawHmac);
Example Base64 Encoded HMAC result:
  • Input signature: <The complete signature example from above>
  • Secret: dj4qUsj42CYQQ0AHxC2j8BvBR2pVPUEraTvhQi0Sh8M=
  • Result: c8TsLja+yI2Z3XTI3WaQJQw4K+x00N1QaKpR5Y3TbtY=

Authorization header from HMAC

The authorization header can now be assembled from some of the values used and created in the previous steps. The header value follows this format (including the hmac-prefix):

hmac apikey:hmac:nonce:timestamp

Where the hmac component is the previously calculated HMAC in Base64 encoding.

HTTP header example
Authorization: hmac f96fa9b05c5947cbbc870d7c8255f6d8:c8TsLja+yI2Z3XTI3WaQJQw4K+x00N1QaKpR5Y3TbtY=:983fad75117e4b02937b291d371a8f9e:1446723703

The HMAC can be placed in either Authorization or X-Authorization:

API Methods
Partnerships
POST /Partnerships
GET /Partnerships
GET /Partnerships/{partnershipId}/signInAdmin
Add Partnership
POST /Partnerships

Add a partnership with a licence holder.

If the licence holder is not currently registered with Visiba Care, a licence holder registration is also performed. If there is not enough information for us to uniquely identify this licence holder, it may be registered multiple times (once per embassy), which may affect the experience of the licence holder. See the Partnership data model for more information.

Request body

Examples
{
    "CompanyIdentityNumber": "556967-9813",
    "CompanyVatNumber": "SE556967981301",
    "CompanyLegalName": "Visiba Care AB",
    "CompanyDisplayName": "Visiba Care",
    "CompanyEmail": "example@email.com",
    "CompanyPhone": "+46123456789",
    "ContactName": "Firstname Surname",
    "ContactEmail": "example@email.com",
    "ContactPhone": "+46123456789",
    "LanguageCode": "sv",
    "TimeZoneIanaId": "Europe/Stockholm",
    "ActiveLanguageCodes": [
        "sv"
    ],
    "ClientIdentifiers": [
        "Phone"
    ],
    "ClientAuthMethods": [
        "SMS"
    ],
    "PartnershipId": "Visiba_Care"
}

Responses

200 OK
Body
wrapped with Response Envelope
Examples
{
    "Successful": true,
    "ValidationError": "None",
    "ErrorCode": "",
    "Data": {
        "CompanyIdentityNumber": "556967-9813",
        "CompanyVatNumber": "SE556967981301",
        "CompanyLegalName": "Visiba Care AB",
        "CompanyDisplayName": "Visiba Care",
        "CompanyEmail": "example@email.com",
        "CompanyPhone": "+46123456789",
        "ContactName": "Firstname Surname",
        "ContactEmail": "example@email.com",
        "ContactPhone": "+46123456789",
        "LanguageCode": "sv",
        "TimeZoneIanaId": "Europe/Stockholm",
        "ActiveLanguageCodes": [
            "sv"
        ],
        "ClientIdentifiers": [
            "Phone"
        ],
        "ClientAuthMethods": [
            "SMS"
        ],
        "PartnershipId": "Visiba_Care"
    }
}
List Partnerships
GET /Partnerships

Responses

200 OK
Body
wrapped with Response Envelope
Array of Partnership
Sign In Administrator
GET /Partnerships/{partnershipId}/signInAdmin

Simple administration without managing users and passwords. Returns a one-time-use URL that the user should be redirected to. The user will be signed in automatically.

Path variables

partnershipId
string required

Your identifier for a partnership you have with a registered licence holder

Responses

200 OK
Body
wrapped with Response Envelope
Object
SignInUrl
string

Send the user to this URL to automatically sign in

Examples
{
    "Successful": true,
    "ValidationError": "None",
    "ErrorCode": "",
    "Data": {
        "SignInUrl": "https://se.visibacare.com/some-place"
    }
}
Resources
POST /Resources
GET /Resources
GET /Resources/{resourceId}
Add Resource
POST /Resources

Add a resource to a licence holder. The API is very flexible and lets you register a resource with barely any input. You should be aware though, that if you don't provide any identifying value(s), duplicates may be created.

The identifying fields are:

  • NationalIdentityNumber
  • Username
  • Email (temporarily, because it's also used as a username; this will most likely change in the future, so don't count on it staying this way)

Request parameters

PartnershipId
string required

Your identifier for a partnership you have with a registered licence holder

Pattern:Letters, digits, underscore and hyphen
Example:
My_Partnership_Id

Request body

Examples
{
    "FirstName": "Jane",
    "Surname": "Doe",
    "NationalIdentityNumber": "9107251234",
    "Email": "jane.doe@mail.com",
    "Phone": "+46123456789",
    "Username": "abcd123",
    "Password": "abcd123"
}

Responses

200 Created
Body
wrapped with Response Envelope
Examples
{
    "Successful": true,
    "ValidationError": "None",
    "ErrorCode": "",
    "Data": {
        "Id": 1,
        "FirstName": "Jane",
        "Surname": "Doe",
        "NationalIdentityNumber": "199107251234",
        "Email": "jane.doe@mail.com",
        "Phone": "+46123456789",
        "Username": "abcd1234"
    }
}
List Resources
GET /Resources

Request parameters

PartnershipId
string required

Your identifier for a partnership you have with a registered licence holder

Pattern:Letters, digits, underscore and hyphen
Example:
My_Partnership_Id

Responses

200 OK
Body
wrapped with Response Envelope
Array of Resource
Examples
{
    "Successful": true,
    "ValidationError": "None",
    "ErrorCode": "",
    "Data": [
        {
            "Id": 1,
            "FirstName": "Jane",
            "Surname": "Doe",
            "NationalIdentityNumber": "199107251234",
            "Email": "jane.doe@mail.com",
            "Phone": "+46123456789",
            "Username": "abcd1234"
        }
    ]
}
Get Resource
GET /Resources/{resourceId}

Path variables

resourceId
string required

Request parameters

PartnershipId
string required

Your identifier for a partnership you have with a registered licence holder

Pattern:Letters, digits, underscore and hyphen
Example:
My_Partnership_Id

Responses

200 OK
Body
wrapped with Response Envelope
Examples
{
    "Successful": true,
    "ValidationError": "None",
    "ErrorCode": "",
    "Data": {
        "Id": 1,
        "FirstName": "Jane",
        "Surname": "Doe",
        "NationalIdentityNumber": "199107251234",
        "Email": "jane.doe@mail.com",
        "Phone": "+46123456789",
        "Username": "abcd1234"
    }
}
Appointments
POST /Appointments
GET /Appointments/{AppointmentId}
POST /Appointments/{AppointmentId}/Participants
POST /Appointments/{AppointmentId}/Cancel
POST /Appointments/{AppointmentId}/Participants/{ParticipantId}/Bypass
Create Appointment
POST /Appointments

Register a new appointment. If an appointment with the same AppointmentId or (active) Magnet is already registered, any new participants are added to it, but the appointment itself is unmodified. The created/updated appointment is returned in the response.

Request parameters

PartnershipId
string required

Your identifier for a partnership you have with a registered licence holder

Pattern:Letters, digits, underscore and hyphen
Example:
My_Partnership_Id

Request body

Examples
{
    "AppointmentId": "1234",
    "Start": "2015-07-25T12:30Z",
    "Duration": 20,
    "Participants": [
        {
            "ParticipantId": "731",
            "Role": "User",
            "Client": {
                "Kind": "Guest",
                "NationalIdentityNumber": "198007110236",
                "CountryCode": "SE",
                "DisplayName": "John Doe",
                "Email": "john.doe@gmail.com",
                "Phone": "+46123456789",
                "LanguageCode": "sv"
            },
            "ResourceId": null,
            "PerformMediaTest": true,
            "RequireAuth": true,
            "SendSms1DayReminder": true,
            "SendSms1HourReminder": true,
            "SendSmsLateReminder": true,
            "SendEmail1DayReminder": true,
            "SendEmailConfirmation": true
        }
    ],
    "Magnet": "a_string_12345_&%!",
    "MagnetLifetime": 20
}

Responses

200 OK
Body
wrapped with Response Envelope
Examples
{
    "Successful": true,
    "ValidationError": "None",
    "ErrorCode": "",
    "Data": {
        "AppointmentId": "1234",
        "Start": "2015-07-25T12:30Z",
        "Duration": 20,
        "Participants": [
            {
                "ParticipantId": "731",
                "Role": "User",
                "Client": {
                    "Kind": "Guest",
                    "NationalIdentityNumber": "198007110236",
                    "CountryCode": "SE",
                    "DisplayName": "John Doe",
                    "Email": "john.doe@gmail.com",
                    "Phone": "+46123456789",
                    "LanguageCode": "sv"
                },
                "ResourceId": null,
                "PerformMediaTest": true,
                "RequireAuth": true,
                "SendSms1DayReminder": true,
                "SendSms1HourReminder": true,
                "SendSmsLateReminder": true,
                "SendEmail1DayReminder": true,
                "SendEmailConfirmation": true,
                "AppointmentUrl": "https://se.visibacare.com/an-appointment-url/"
            }
        ],
        "Magnet": "a_string_12345_&%!",
        "MagnetLifetime": 20
    }
}
Get Appointment
GET /Appointments/{AppointmentId}

Path variables

AppointmentId
string required

Your own ID for this appointment

Examples:
1234My_String_Identifier

Request parameters

PartnershipId
string required

Your identifier for a partnership you have with a registered licence holder

Pattern:Letters, digits, underscore and hyphen
Example:
My_Partnership_Id

Responses

200 OK
Body
wrapped with Response Envelope
Examples
{
    "Successful": true,
    "ValidationError": "None",
    "ErrorCode": "",
    "Data": {
        "AppointmentId": "1234",
        "Start": "2015-07-25T12:30Z",
        "Duration": 20,
        "Participants": [
            {
                "ParticipantId": "731",
                "Role": "User",
                "Client": {
                    "Kind": "Guest",
                    "NationalIdentityNumber": "198007110236",
                    "CountryCode": "SE",
                    "DisplayName": "John Doe",
                    "Email": "john.doe@gmail.com",
                    "Phone": "+46123456789",
                    "LanguageCode": "sv"
                },
                "ResourceId": null,
                "PerformMediaTest": true,
                "RequireAuth": true,
                "SendSms1DayReminder": true,
                "SendSms1HourReminder": true,
                "SendSmsLateReminder": true,
                "SendEmail1DayReminder": true,
                "SendEmailConfirmation": true,
                "AppointmentUrl": "https://se.visibacare.com/an-appointment-url/"
            }
        ],
        "Magnet": "a_string_12345_&%!",
        "MagnetLifetime": 20
    }
}
Add Participants
POST /Appointments/{AppointmentId}/Participants

Add one or more participants to an appointment. There is currently only support for two active participants (one host, one user).

Path variables

AppointmentId
string required

Your own ID for this appointment

Examples:
1234My_String_Identifier

Request parameters

PartnershipId
string required

Your identifier for a partnership you have with a registered licence holder

Pattern:Letters, digits, underscore and hyphen
Example:
My_Partnership_Id

Request body

Array of Participant
Examples
[
    {
        "ParticipantId": "731",
        "Role": "User",
        "Client": {
            "Kind": "Guest",
            "NationalIdentityNumber": "198007110236",
            "CountryCode": "SE",
            "DisplayName": "John Doe",
            "Email": "john.doe@gmail.com",
            "Phone": "+46123456789",
            "LanguageCode": "sv"
        },
        "ResourceId": null,
        "PerformMediaTest": true,
        "RequireAuth": true,
        "SendSms1DayReminder": true,
        "SendSms1HourReminder": true,
        "SendSmsLateReminder": true,
        "SendEmail1DayReminder": true,
        "SendEmailConfirmation": true
    }
]

Responses

200 OK
Body
wrapped with Response Envelope
Examples
{
    "Successful": true,
    "ValidationError": "None",
    "ErrorCode": "",
    "Data": {
        "AppointmentId": "1234",
        "Start": "2015-07-25T12:30Z",
        "Duration": 20,
        "Participants": [
            {
                "ParticipantId": "731",
                "Role": "User",
                "Client": {
                    "Kind": "Guest",
                    "NationalIdentityNumber": "198007110236",
                    "CountryCode": "SE",
                    "DisplayName": "John Doe",
                    "Email": "john.doe@gmail.com",
                    "Phone": "+46123456789",
                    "LanguageCode": "sv"
                },
                "ResourceId": null,
                "PerformMediaTest": true,
                "RequireAuth": true,
                "SendSms1DayReminder": true,
                "SendSms1HourReminder": true,
                "SendSmsLateReminder": true,
                "SendEmail1DayReminder": true,
                "SendEmailConfirmation": true,
                "AppointmentUrl": "https://se.visibacare.com/an-appointment-url/"
            }
        ],
        "Magnet": "a_string_12345_&%!",
        "MagnetLifetime": 20
    }
}
Cancel Appointment
POST /Appointments/{AppointmentId}/Cancel

Path variables

AppointmentId
string required

Request parameters

PartnershipId
string required

Your identifier for a partnership you have with a registered licence holder

Pattern:Letters, digits, underscore and hyphen
Example:
My_Partnership_Id

Request body

Object
ValidateProximity
boolean

Whether the cancellation should be denied if too close to the Start of the appointment (recommended if the cancellation was initiated by the Client)

SendClientNotifications
boolean

Whether client participants (Client or Guest) should be notified of the cancellation

Examples
{
    "ValidateProximity": true,
    "SendClientNotifications": true
}

Responses

200 Created
Body
wrapped with Response Envelope
Object
Examples
{
    "Successful": true,
    "ValidationError": "None",
    "ErrorCode": ""
}
Create Auth Bypass
POST /Appointments/{AppointmentId}/Participants/{ParticipantId}/Bypass

In cases where the user is already securely signed in outside of Visiba Care, but not in Visiba Care, you may use this endpoint to create a one-time-use URL that automatically signs in the user as a certain Appointment Participant.

Requires special permission to use because of the security implications when not implemented properly.

Path variables

AppointmentId
string required

The ID of the appointment containing the participant that should be signed in.

Examples:
1234My_String_Identifier
ParticipantId
string required

The ID of the participant that should be signed in.

Examples:
731johdoe

Request parameters

PartnershipId
string required

Your identifier for a partnership you have with a registered licence holder

Pattern:Letters, digits, underscore and hyphen
Example:
My_Partnership_Id

Request body

Object
TargetUrl
string

Where the user should be automatically redirected to after being signed in.

Example:
https://se.visibacare.com/some-place
Examples
{
    "TargetUrl": "https://se.visibacare.com/some-place"
}

Responses

200 OK
Body
wrapped with Response Envelope
Object
AuthUrl
string

A one-time use URL that automatically signs in the user as requested.

Example:
https://se.visibacare.com/bypass
Examples
{
    "Successful": true,
    "ValidationError": "None",
    "ErrorCode": "",
    "Data": {
        "AuthUrl": "https://se.visibacare.com/bypass"
    }
}
Drop-In
GET /DropIn/Queues/{QueueId}
POST /DropIn/Queues/{QueueId}/Tickets
Get Queue
GET /DropIn/Queues/{QueueId}

Path variables

QueueId
integer required

Drop-in queue ID

Request parameters

PartnershipId
string required

Your identifier for a partnership you have with a registered licence holder

Pattern:Letters, digits, underscore and hyphen
Example:
My_Partnership_Id

Responses

200 OK
Body
wrapped with Response Envelope
Examples
{
    "Successful": true,
    "ValidationError": "None",
    "ErrorCode": "",
    "Data": {
        "Id": 123,
        "Name": "Simple problems",
        "TicketPrice": {
            "Value": 1200,
            "Formatted": "12.00 SEK",
            "Info": {
                "ThreeLetterCode": "SEK",
                "DisplayName": "Swedish Krona"
            }
        },
        "RequiresAuthentication": true,
        "RequiresPayment": true,
        "CurrentWaitTime": 300,
        "IsCurrentlyClosed": true,
        "OpenHours": [
            [
                {
                    "DayOfWeek": 6,
                    "Closed": false,
                    "OpeningDateTime": {
                        "UtcValue": "2015-07-25T12:30Z",
                        "LocalValue": "2015-07-25T14:30Z"
                    },
                    "ClosingDateTime": {
                        "UtcValue": "2015-07-25T12:30Z",
                        "LocalValue": "2015-07-25T14:30Z"
                    },
                    "OpeningTime": "14:30:00",
                    "ClosingTime": "15:30:00"
                }
            ]
        ]
    }
}
Create Ticket
POST /DropIn/Queues/{QueueId}/Tickets

Path variables

QueueId
string required

Request parameters

PartnershipId
string required

Your identifier for a partnership you have with a registered licence holder

Pattern:Letters, digits, underscore and hyphen
Example:
My_Partnership_Id

Request body

Examples
{
    "TicketId": "123",
    "Client": {
        "Kind": "Guest",
        "NationalIdentityNumber": "198007110236",
        "CountryCode": "SE",
        "DisplayName": "John Doe",
        "Email": "john.doe@gmail.com",
        "Phone": "+46123456789",
        "LanguageCode": "sv"
    },
    "ClientMessage": "Very serious lorem ipsum",
    "HtmlInfoView": "<html><body>My custom things here</body></html>",
    "PerformMediaTest": true,
    "RequireAuth": true,
    "CompletedRedirectUrl": "https://somewhere",
    "TicketUrl": "https://se.visibacare.com/a-dropin-ticket-url/"
}
Data Reference
Response Envelope object

Properties

Successful
boolean

Whether the request was successfully processed and completed without error

ValidationError

The data passed to the method failed validation of the field specified in this error

Default:
None
ErrorCode
string nullable

An alias/code for an error that occured during processing of the request. Does not contain any contextual data.

Data
Object data_container

Response data

Validation Error string
string
Enumeration:
None
Partnership_InvalidIdentifier
LicenceHolder_InvalidCompanyIdentityNumber
LicenceHolder_InvalidCompanyVatNumber
LicenceHolder_InvalidCompanyEmail
LicenceHolder_InvalidCompanyPhone
LicenceHolder_InvalidContactEmail
LicenceHolder_InvalidContactPhone
LicenceHolder_InvalidLanguageCode
LicenceHolder_InvalidCountryCode
LicenceHolder_InvalidIanaTimeZoneId
LicenceHolder_InvalidClientAuthMethod
Client_InvalidNationalIdentityNumber
Client_InvalidCountryCode
Client_InvalidEmail
Client_InvalidPhone
Client_InvalidLanguageCode
Appointment_InvalidIdentifier
Appointment_InvalidStart
Appointment_InvalidDuration
Participant_InvalidIdentifier
Participant_InvalidRole
Participant_InvalidNumberOfIdentities
DropInTicket_InvalidIdentifier
Partnership object
extends LicenceHolder

Properties

PartnershipId
string

Your own identifier for your partnership with this licence holder

Pattern:Letters, digits, underscore and hyphen
Examples:
Visiba_CareHelsinki_12
LicenceHolder object

An organization/company that holds Visiba Care licences for its doctors/other resources.

Properties

CompanyIdentityNumber
string nullable

The company identification number of the licence holder

Currently only allowed in SE

Example:
556967-9813
CompanyVatNumber
string nullable

The VAT number of the licence holder (if applicable)

Example:
SE556967981301
CompanyLegalName
string
Examples:
Visiba Care ABVisiba Care Inc.
CompanyDisplayName
string
Example:
Visiba Care
CompanyEmail
string
Example:
example@email.com
CompanyPhone
string
Pattern:E.164 format
Example:
+46123456789
ContactName
string nullable
Example:
Firstname Surname
ContactEmail
string nullable
Example:
example@email.com
ContactPhone
string nullable
Pattern:E.164 format
Example:
+46123456789
LanguageCode
string

Preferred/default language code

Examples:
svensv-SE
TimeZoneIanaId
string

Time zone identifier, by IANA standard

(listing and Windows-mappings: http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/zone_tzid.html)

Example:
Europe/Stockholm
ActiveLanguageCodes
Array of string

All selectable language codes for the licence holder (also contains the preferred language)

ClientIdentifiers
Array of string

A set of identifiers that every client is required to have. Valid values are NationalIdentityNumber and Phone. The set affects what auth methods are available and can't be changed after first creation. If no set is provided, NationalIdentityNumber will be used

Example:
[
    "NationalIdentityNumber",
    "Phone"
]
ClientAuthMethods
Array of AuthMethodId

A set of authentication methods that clients may use to authenticate themselves. Note that many methods are limited to certain countries, nationalities, and specific Visiba Care installations

Example:
[
    "SMS",
    "BankIdSE"
]
Types: Partnership
Resource object

An employee/doctor/nurse at a licence holder. Each resource is granted a single licence.

Properties

Id
integer

Readonly. Generated automatically.

FirstName
string
Example:
Jane
Surname
string
Example:
Doe
NationalIdentityNumber
string nullable

Such as "Personnummer" or "Henkilötunnus".

Currently only allowed for SE, FI, NO.

Most common formats are accepted, but the input is normalized to a standard format, so the return value may not be exactly the same as was sent to the API.

See: https://en.wikipedia.org/wiki/National_identification_number

Example:
199107251234
Email
string nullable

A unique email address. Used for reminders/notifications, but also serves as an alternative to Username

Example:
jane.doe@mail.com
Phone
string nullable

Mobile phone number. Used for reminders/notifications

Pattern:E.164 format
Example:
+46123456789
Username
string nullable

A unique username that can be used to sign in to the Visiba Care Office

Pattern:Letters, digits, underscore and hyphen
Example:
jane_91
Password
string nullable

Can only be set here during creation

Pattern:At least 4 chars, only non-whitespace
Clients
Client object

Properties

Determines the kind of client.

Default:
Guest
NationalIdentityNumber
string nullable

Such as "Personnummer" or "Henkilötunnus". When the user has Kind=Client, this is used as an identifier, but not required.

Currently only allowed for SE, FI, NO.

Most common formats are accepted, but the input is normalized to a standard format, so the return value may not be exactly the same as was sent to the API.

See: https://en.wikipedia.org/wiki/National_identification_number

Examples:
198007110236800711+0T36
CountryCode
string

Nationality of this client. Has an effect on NationalidentityNumber. Note that a licence holder only supports a certain set of nationalities.

Default:
Licence holder default setting
Examples:
SEFI
DisplayName
string nullable
Example:
John Doe
Email
string nullable

Used for reminders/notifications. When the user has Kind=Client, this is used as an identifier and is required.

Example:
john.doe@gmail.com
Phone
string nullable

Mobile phone number. Used for reminders/notifications

Pattern:E.164 format
Example:
+46123456789
LanguageCode
string nullable

The language of UI elements and reminders/notifications

Default:
The default language of the licence holder
Examples:
svensv-SE
Client Kind string
string
Enumeration:
Guest

A one-time user. Can be anonymous (empty fields).

Client

A standard user (client/patient). When used, Email is an identifier, and thus required. NationalIdentityNumber is not required, but is also used as an identifier.

Types: Client
Client Identifier string
string
Enumeration:
NationalIdentityNumber
Phone
Appointments
Appointment object
An appointment where several participants (currently max 2) communicate in video, audio, and text

Properties

AppointmentId
string

Your own ID for this appointment. It has to be unique in the current Partnership. It's reused in other API endpoints

Pattern:Letters, digits, underscore and hyphen
Default:
A random UUID
Examples:
1234My_String_Identifier
Start
string date-time nullable

Start time of the appointment. If null, certain functionality may be disabled, such as reminders

Example:
2015-07-25T12:30Z
Duration
integer nullable

Duration of the appointment, in minutes. Does not restrict the actual length of the appointment while ongoing.

Example:
20
Reason
string nullable

The reason for booking this appointment

Example:
I need help with a problem concerning my [...]
Participants
Array of Participant

All participants of this appointment

Magnet
string nullable

Other attempts at registering appointments with the same Magnet will end up with this appointment. The magnet is active right away and stays in effect until Start+Duration. Requires special permission to use, because it does not just affect your embassy/partnership.

Example:
a_string_12345_&%!
MagnetLifetime
integer

An increase of the Magnet's lifetime, in minutes. Useful in case Start or Duration is not set/reliable.

Default:
0
Example:
20
Participant object
A participant of an appointment

Note: For compatibility reasons, the Participant model contains some extra properties inherited from the Client model. They are not included in these docs and should be ignored.

Properties

ParticipantId
string

Your own ID for this participant. It has to be unique in the current Appointment. It's reused in other API endpoints

Pattern:Letters, digits, underscore and hyphen
Default:
A random UUID
Examples:
731johdoe

Gives certain permissions during the appointment, such as ending the appointment.

Client
Client nullable

A client/patient or one-time-user (guest)

Example:
{
    "Kind": "Guest",
    "NationalIdentityNumber": "198007110236",
    "CountryCode": "SE",
    "DisplayName": "John Doe",
    "Email": "john.doe@gmail.com",
    "Phone": "+46123456789",
    "LanguageCode": "sv"
}
ResourceId
integer nullable

The Visiba Care id of a doctor/nurse/other resource with a Visiba Care licence

Example:
123
PerformMediaTest
boolean

Whether the user must perform a video/audio test before he/she can access the appointment

Default:
false
RequireAuth
boolean

Whether the user must authenticate before he/she can access the appointment

Default:
false
CompletedRedirectUrl
string uri nullable

A URL that the participant should be redirected to after having completed the appointment

SendSms1DayReminder
boolean

An appointment reminder is sent by SMS, 24-26 hours before the appointment

Default:
false
SendSms1HourReminder
boolean

An appointment reminder is sent by SMS, 20-60 minutes before the appointment

Default:
false
SendSmsLateReminder
boolean

An appointment reminder is sent by SMS, 1-10 minutes after the scheduled beginning of the appointment

Default:
false
SendEmail1DayReminder
boolean

An appointment reminder is sent by Email, 24-26 hours before the appointment

Default:
false
SendEmailConfirmation
boolean

Non-hosts only: An appointment confirmation is sent by Email with a personal link to the AppointmenUrl

Default:
false
AppointmentUrl
string

Readonly. The participant must navigate to this URL to initiate the call. It's created automatically by the API after creation of the participant, and cannot be changed

Example:
https://se.visibacare.com/an-appointment-url/
Types: Appointment
Appointment Participant Role string
string
Enumeration:
Host

The host of the appointment. Has exclusive access to certain functionality.

User
Types: Participant
Drop-In
DropInQueue object

Properties

Id
integer

Drop-in queue ID (generated by Visiba Care)

Example:
123
Name
string

Name of the queue

Examples:
Simple problemsOther problems
TicketPrice
CurrencyDisplay nullable

The price of a queue ticket

Example:
{
    "Value": 1200,
    "Formatted": "12.00 SEK",
    "Info": {
        "ThreeLetterCode": "SEK",
        "DisplayName": "Swedish Krona"
    }
}
RequiresAuthentication
boolean

Whether acquiring a queue ticket requires authentication

RequiresPayment
boolean

Whether acquiring a queue ticket requires payment

CurrentWaitTime
integer

The currently estimated queue time (end of queue) in seconds

Example:
300
IsCurrentlyClosed
boolean

Whether the queue is currently closed

OpenHours
Array

The opening-hours for today and the next 6 days (the top-level array is for days, the sub-levels are for settings per day)

Methods: Get Queue
DropInOpenSetting object

Properties

DayOfWeek
integer

To which day of the week this setting refers (sunday = 0, monday = 1, ...)

Example:
6
Closed
boolean

Whether the queue is closed the whole day (if this is true, to datetime/time field has any meaning)

OpeningDateTime

The start of this setting

Example:
{
    "UtcValue": "2015-07-25T12:30Z",
    "LocalValue": "2015-07-25T14:30Z"
}
ClosingDateTime

The end of this setting

Example:
{
    "UtcValue": "2015-07-25T13:30Z",
    "LocalValue": "2015-07-25T15:30Z"
}
OpeningTime
string

An alternative to OpeningDateTime, with only time (in the Licence Holder's time zone setting)

Example:
14:30:00
ClosingTime
string

An alternative to ClosingDateTime, with only time (in the Licence Holder's time zone setting)

Example:
15:30:00
Types: DropInQueue
DropInTicket object

Properties

TicketId
string

Your own ID for this ticket. It has to be unique in the current DropInQueue. It's reused in other API endpoints

Pattern:Letters, digits, underscore and hyphen
Default:
A random UUID
Examples:
123my-ticket-123
Client

The client that owns this ticket

ClientMessage
string nullable

A text message describing the reason for the ticket

HtmlInfoView
string html nullable

A custom HTML view that displays custom info about this client/ticket to the attendants of the queue. Preferably very small (in both pixels and bytes).

Example:
<html><body>My custom things here</body></html>
PerformMediaTest
boolean

Whether the user must perform a video/audio test before he/she can enter the meeting

Default:
false
RequireAuth
boolean

Whether the user must authenticate before he/she can utilize the ticket (this has no effect if the queue itself does not require authentication)

Default:
true
CompletedRedirectUrl
string uri nullable

A URL that the client should be redirected to after having been attended to

TicketUrl
string uri

Readonly. The client must navigate to this URL to utilize the ticket. It's created automatically by the API after creation of the ticket, and cannot be changed

Example:
https://se.visibacare.com/a-dropin-ticket-url/
Methods: Create Ticket
Data
CurrencyDisplay object

Properties

Value
integer

A value in the currency's lowest denominator (i.e. "ören" in SEK, or "cents" in EUR). There are no fractions.

Example:
1200
Formatted
string

The Value, formatted as per the currency's common/regular denominator

Examples:
12.00 SEK12.00 EUR1200 JPY
Info
Object
ThreeLetterCode
string

The ISO 4217 currency code

Examples:
SEKEUR
DisplayName
string

Presentable name of the currency

Examples:
Swedish KronaEuro
Types: DropInQueue
DateTimeDisplay object

Properties

UtcValue
string date-time

A timestamp in the UTC timezone

Example:
2015-07-25T12:30Z
LocalValue
string date-time

A timestamp in the local timezone

Example:
2015-07-25T14:30Z
AuthMethodId string
string
Enumeration:
SMS
BankIdSE