Contacts

Personal address books and contacts, the organisation directory, and vCard import and export.

MethodPathSummary
GET/api/contacts/bootstrapEverything the contacts page needs to start
GET/api/contacts/directoryThe organisation directory
POST/api/contacts/booksCreate a book
PATCH/api/contacts/books/:idRename an address book
DELETE/api/contacts/books/:idDelete an address book
GET/api/contacts/books/:id/contactsList contacts of a book
POST/api/contacts/books/:id/contactsAdd a contact
PATCH/api/contacts/books/:id/contacts/:uriUpdate a contact
DELETE/api/contacts/books/:id/contacts/:uriDelete a contact
POST/api/contacts/books/:id/importImport a .vcf file (one or many cards)
GET/api/contacts/books/:id/export.vcfExport an address book (.vcf)

#Everything the contacts page needs to start

GET/api/contacts/bootstrap
Address
https://<your-org>.brambleit.cloud/mail/api/contacts/bootstrap
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Mail.

Response 200

FieldTypeDescription
meobject
me.namestring
me.emailstring
booksarray of any
davobject
dav.urlstring
dav.usernamestring
Example response
JSON
{
  "me": {
    "name": "Example name",
    "email": "alex@example.com"
  },
  "books": [],
  "dav": {
    "url": "https://example.com/…",
    "username": "Example username"
  }
}

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/mail/api/contacts/bootstrap', {
  method: 'GET',
  credentials: 'include',
});
const data = await res.json();

#The organisation directory

GET/api/contacts/directory
Address
https://<your-org>.brambleit.cloud/mail/api/contacts/directory
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Mail.

Response 200

FieldTypeDescription
idinteger
namestring
givenstring
familystring
emailstring
titlestring
departmentstring
locationstring
Example response
JSON
[
  {
    "id": 42,
    "name": "Example name",
    "given": "string",
    "family": "string",
    "email": "alex@example.com",
    "title": "Example title",
    "department": "string",
    "location": "string"
  }
]

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/mail/api/contacts/directory', {
  method: 'GET',
  credentials: 'include',
});
const data = await res.json();

#Create a book

POST/api/contacts/books
Address
https://<your-org>.brambleit.cloud/mail/api/contacts/books
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Mail.

Request body JSON

NameTypeDescription
namestring
uriany

Response 200

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/mail/api/contacts/books', {
  method: 'POST',
  credentials: 'include',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({"name":"Example name","uri":"…"}),
});
const data = await res.json();

#Rename an address book

PATCH/api/contacts/books/:id
Address
https://<your-org>.brambleit.cloud/mail/api/contacts/books/:id
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Mail.

Path parameters

NameTypeDescription
idrequiredinteger

Response 200

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/mail/api/contacts/books/42', {
  method: 'PATCH',
  credentials: 'include',
});
const data = await res.json();

#Delete an address book

DELETE/api/contacts/books/:id
Address
https://<your-org>.brambleit.cloud/mail/api/contacts/books/:id
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Mail.

Path parameters

NameTypeDescription
idrequiredinteger

Response 200

FieldTypeDescription
okboolean
Example response
JSON
{
  "ok": true
}

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/mail/api/contacts/books/42', {
  method: 'DELETE',
  credentials: 'include',
});
const data = await res.json();

#List contacts of a book

GET/api/contacts/books/:id/contacts
Address
https://<your-org>.brambleit.cloud/mail/api/contacts/books/:id/contacts
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Mail.

Path parameters

NameTypeDescription
idrequiredinteger

Response 200

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/mail/api/contacts/books/42/contacts', {
  method: 'GET',
  credentials: 'include',
});
const data = await res.json();

#Add a contact

POST/api/contacts/books/:id/contacts
Address
https://<your-org>.brambleit.cloud/mail/api/contacts/books/:id/contacts
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Mail.

Path parameters

NameTypeDescription
idrequiredinteger

Response 200

FieldTypeDescription
uriany
etagany
Example response
JSON
{
  "uri": null,
  "etag": null
}

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/mail/api/contacts/books/42/contacts', {
  method: 'POST',
  credentials: 'include',
});
const data = await res.json();

#Update a contact

PATCH/api/contacts/books/:id/contacts/:uri
Address
https://<your-org>.brambleit.cloud/mail/api/contacts/books/:id/contacts/:uri
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Mail.

Path parameters

NameTypeDescription
idrequiredinteger
urirequiredstring

Request body JSON

NameTypeDescription
etagany
moveTonumber

Response 200

FieldTypeDescription
bookinteger
uriany
etagany
Example response
JSON
{
  "book": 1,
  "uri": null,
  "etag": null
}

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/mail/api/contacts/books/42/contacts/string', {
  method: 'PATCH',
  credentials: 'include',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({"etag":"…","moveTo":12.5}),
});
const data = await res.json();

#Delete a contact

DELETE/api/contacts/books/:id/contacts/:uri
Address
https://<your-org>.brambleit.cloud/mail/api/contacts/books/:id/contacts/:uri
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Mail.

Path parameters

NameTypeDescription
idrequiredinteger
urirequiredstring

Response 200

FieldTypeDescription
okboolean
Example response
JSON
{
  "ok": true
}

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/mail/api/contacts/books/42/contacts/string', {
  method: 'DELETE',
  credentials: 'include',
});
const data = await res.json();

#Import a .vcf file (one or many cards)

POST/api/contacts/books/:id/import

Import a .vcf file (one or many cards). Cards with a UID already in the book replace it.

Address
https://<your-org>.brambleit.cloud/mail/api/contacts/books/:id/import
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Mail.

Path parameters

NameTypeDescription
idrequiredinteger

Response 200

FieldTypeDescription
addedany
updatedany
failedany
Example response
JSON
{
  "added": null,
  "updated": null,
  "failed": null
}

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/mail/api/contacts/books/42/import', {
  method: 'POST',
  credentials: 'include',
});
const data = await res.json();

#Export an address book (.vcf)

GET/api/contacts/books/:id/export.vcf
Address
https://<your-org>.brambleit.cloud/mail/api/contacts/books/:id/export.vcf
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Mail.

Path parameters

NameTypeDescription
idrequiredinteger

Response

A body.

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/mail/api/contacts/books/42/export.vcf', {
  method: 'GET',
  credentials: 'include',
});
const data = await res.json();