Configurer les Offerings

Avec l'API timum, vous définissez ce que vous proposez : Products (services), Resources (objets réservables) et Contact Profiles (coordonnées publiques).

Ordre de configuration

  1. Créer des Products - Les services que vous proposez
  2. Créer des Resources - Les objets réservables (biens, salles, collaborateurs)
  3. Créer des Contact Profiles (facultatif) - Coordonnées publiques

Products (produits/services)

Un Product définit un type de service que vous proposez (par ex. "visite", "entretien-conseil"). Les Products ont des contraintes de durée (durée min/max) et peuvent être liés à des ressources.

Create Product

Crée un nouveau produit pour un fournisseur.

POST /crms/:crmId/provider/:providerRef/products
curl -X POST "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/products" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "reference": "prod-besichtigung@yourCrm",
    "name": "Besichtigung",
    "description": "30-minütige Objektbesichtigung mit unserem Experten",
    "minDuration": 30,
    "maxDuration": 45
  }'

Paramètres de chemin

ParamètreTypeDescription
crmIdstringVotre identifiant CRM
providerRefstringRéférence du fournisseur

Request Body

ChampTypeObligatoireDescription
referencestringOuiRéférence unique du produit
namestringOuiNom d'affichage du produit
descriptionstringNonDescription destinée aux clients (par ex. indications sur le rendez-vous)
minDurationnumberNonDurée minimale en minutes
maxDurationnumberNonDurée maximale en minutes

Response

201 Created
{
  "api-info": {
    "version": "1"
  },
  "product": {
    "uuid": "92867f70-4836-11e5-bc04-021a52c25043",
    "reference": "prod-besichtigung@yourCrm",
    "name": "Besichtigung",
    "description": "30-minütige Objektbesichtigung mit unserem Experten",
    "minDuration": 30,
    "maxDuration": 45,
    "leadTimeMinutes": null,
    "followUpTimeMinutes": null
  }
}

Lead/Follow-Up Time :

leadTimeMinutes et followUpTimeMinutes définissent des temps tampons avant et après le rendez-vous. Ils peuvent être configurés via l'interface timum.

Get Products

Liste tous les produits d'un fournisseur.

GET /crms/:crmId/provider/:providerRef/products
curl -X GET "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/products" \
  -H "X-TIMUM-CLIENT-ID: your-api-key"

Response

200 OK
[
  {
    "uuid": "92867f70-4836-11e5-bc04-021a52c25043",
    "reference": "prod-besichtigung@yourCrm",
    "name": "Besichtigung",
    "description": "30-minütige Objektbesichtigung",
    "minDuration": 30,
    "maxDuration": 45,
    "leadTimeMinutes": null,
    "followUpTimeMinutes": null
  },
  {
    "uuid": "0bb978c0-5740-11eb-8b95-024759471364",
    "reference": "prod-beratung@yourCrm",
    "name": "Beratungsgespräch",
    "description": "Individuelle Beratung",
    "minDuration": 15,
    "maxDuration": 30,
    "leadTimeMinutes": null,
    "followUpTimeMinutes": null
  }
]

Resources

Une Resource représente un objet réservable - typiquement un bien immobilier, une salle, un véhicule ou un collaborateur. Les Resources sont liées à des Products pour indiquer quels services sont proposés sur cette ressource.

Create Resource

Crée une nouvelle ressource ou met à jour une ressource existante (si onDuplicateRaise=false).

POST /crms/:crmId/provider/:providerRef/resources
curl -X POST "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/resources?onDuplicateRaise=false" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "reference": "res-musterstr1@yourCrm",
    "publicName": "Musterstraße 1 - 3-Zimmer-Wohnung",
    "internalName": "Objekt 4711 - Musterstraße",
    "description": "Schöne 3-Zimmer-Wohnung mit Balkon im 2. OG",
    "products": ["prod-besichtigung@yourCrm", "prod-beratung@yourCrm"],
    "contact": "user-123@yourCrm",
    "contactProfileReference": "profile-1@yourCrm",
    "website": "https://example.com/objekt/4711",
    "address": {
      "city": "Berlin",
      "countryCode": "DE",
      "street": "Musterstraße",
      "number": "1",
      "zip": "10115"
    }
  }'

Paramètres de requête

ParamètreTypePar défautDescription
onDuplicateRaisebooleanfalseSi true : la requête échoue avec 400 si la référence existe déjà. Si false : la ressource existante est mise à jour.

Request Body

ChampTypeObligatoireDescription
referencestringOuiRéférence unique de la ressource
publicNamestringOuiNom affiché aux clients
internalNamestringOuiNom interne pour le fournisseur
descriptionstringNonDescription de la ressource
productsstring[]NonTableau de références de produits. Les produits doivent déjà exister. Définit quels services sont proposés sur cette ressource.
contactstringNon*Référence utilisateur comme personne de contact. *Obligatoire si contactProfileReference est indiqué.
contactProfileReferencestringNonRéférence d'un Contact Profile. Doit appartenir à l'utilisateur de contact.
websitestringNonURL du site web de la ressource
addressobjectNonAdresse de la ressource. countryCode est facultatif (par défaut : "DE"). Tous les autres champs (city, zip, street, number) sont obligatoires si address est indiqué.

Response

201 Created
{
  "reference": "res-musterstr1@yourCrm",
  "uuid": "264de7b0-0e4a-11ea-988f-fa1e49f3d761",
  "provider": "prov-001@yourCrm",
  "publicName": "Musterstraße 1 - 3-Zimmer-Wohnung",
  "internalName": "Objekt 4711 - Musterstraße",
  "description": "Schöne 3-Zimmer-Wohnung mit Balkon im 2. OG",
  "contact": "user-123@yourCrm",
  "archived": false,
  "products": ["prod-besichtigung@yourCrm", "prod-beratung@yourCrm"],
  "address": {
    "city": "Berlin",
    "countryCode": "DE",
    "street": "Musterstraße",
    "number": "1",
    "zip": "10115"
  }
}

Update Resource

Met à jour une ressource existante. Seuls les champs transmis sont modifiés.

POST /crms/:crmId/provider/:providerRef/resources/:resourceRef
curl -X POST "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/resources/res-musterstr1@yourCrm" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "publicName": "Musterstraße 1 - Traumwohnung mit Balkon",
    "products": ["prod-besichtigung@yourCrm"],
    "archived": false
  }'

Champ supplémentaire pour la mise à jour

ChampTypeDescription
archivedbooleanDéfinit la ressource comme archivée (true) ou active (false). Les ressources archivées ne sont plus réservables par les clients.

Response

Renvoie la ressource mise à jour (comme pour Create). Statut : 202 Accepted.

Get Resources

Liste toutes les ressources d'un fournisseur.

GET /crms/:crmId/provider/:providerRef/resources
curl -X GET "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/resources" \
  -H "X-TIMUM-CLIENT-ID: your-api-key"

Response

200 OK
[
  {
    "reference": "res-musterstr1@yourCrm",
    "uuid": "264de7b0-0e4a-11ea-988f-fa1e49f3d761",
    "provider": "prov-001@yourCrm",
    "publicName": "Musterstraße 1 - 3-Zimmer-Wohnung",
    "internalName": "Objekt 4711 - Musterstraße",
    "description": "Schöne 3-Zimmer-Wohnung",
    "contact": "user-123@yourCrm",
    "archived": false,
    "products": ["prod-besichtigung@yourCrm"],
    "address": {
      "city": "Berlin",
      "countryCode": "DE",
      "street": "Musterstraße",
      "number": "1",
      "zip": "10115"
    }
  }
]

Delete Resource

Supprime une ressource. Échoue s'il existe des rendez-vous futurs (sauf si ignoreFutureAppointments=true).

DELETE /crms/:crmId/provider/:providerRef/resources/:resourceRef
curl -X DELETE "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/resources/res-musterstr1@yourCrm?ignoreFutureAppointments=true" \
  -H "X-TIMUM-CLIENT-ID: your-api-key"

Paramètres de requête

ParamètreTypeDescription
ignoreFutureAppointmentsbooleanSi true : la ressource est supprimée même s'il existe des rendez-vous futurs. Tous les participants sont informés de l'annulation et les rendez-vous sont archivés.

Irréversible :

La suppression d'une ressource est irréversible. Utilisez archived: true sur l'endpoint de mise à jour si vous souhaitez seulement désactiver la ressource.

Contact Profiles

Les Contact Profiles définissent la manière dont un utilisateur est présenté publiquement. Ils contiennent des canaux de contact (téléphone, e-mail, liens vidéo, etc.) que les clients voient.

Profil général vs. profil spécifique au fournisseur

  • General Profile : Profil par défaut d'un utilisateur, utilisé lorsqu'aucun profil spécifique n'est attribué
  • Provider Profile : Profil spécifique pour un fournisseur donné

Get General Profile

Récupère le profil de contact général d'un utilisateur.

GET /crms/:crmId/user/:userRef/generalContactProfile
curl -X GET "https://www.timum.de/crms/{crmId}/user/user-123@yourCrm/generalContactProfile" \
  -H "X-TIMUM-CLIENT-ID: your-api-key"

Response

200 OK
{
  "name": "Max Mustermann - Immobilienexperte",
  "contactChannels": [
    {
      "label": "Mobil",
      "type": "mobile",
      "value": "+49 170 1234567"
    },
    {
      "label": "Email",
      "type": "email",
      "value": "max@example.com"
    },
    {
      "label": "Telefon",
      "type": "phone",
      "value": "+49 30 12345678"
    }
  ]
}

Update General Profile

Met à jour le profil de contact général d'un utilisateur.

PUT /crms/:crmId/user/:userRef/generalContactProfile
curl -X PUT "https://www.timum.de/crms/{crmId}/user/user-123@yourCrm/generalContactProfile" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Max Mustermann - Ihr Immobilienexperte",
    "contactChannels": [
      {
        "label": "Mobil",
        "type": "mobile",
        "value": "+49 170 1234567"
      },
      {
        "label": "Email",
        "type": "email",
        "value": "max@example.com"
      },
      {
        "label": "Telefon",
        "type": "phone",
        "value": "+49 30 12345678"
      },
      {
        "label": "Video-Call",
        "type": "video",
        "value": "https://meet.example.com/max"
      }
    ]
  }'

Request Body

ChampTypeObligatoireDescription
namestringOuiNom public. Peut différer du nom de connexion (par ex. nom d'entreprise).
contactChannelsarrayOuiTableau de canaux de contact

Champs du Contact Channel

ChampTypeObligatoireDescription
labelstringNonLibellé d'affichage du canal
typestringOuiType de canal. Valeurs autorisées : mobile - numéro mobile (visible par les clients) ; phone - fixe (visible par les clients) ; email - e-mail (visible par les clients, pour les e-mails transactionnels) ; video - lien d'appel vidéo ; messenger - messagerie ; link - lien général ; location - adresse/lieu
valuestringOuiValeur du canal (numéro, e-mail, URL, adresse)

Algorithme pour contactChannels

  • Nouveau type dans le tableau : Un nouveau canal est créé
  • Type existant dans le tableau : Le canal est mis à jour
  • Type absent du tableau : Le canal est supprimé

Un canal par type :

Actuellement, un seul canal par type peut exister. Plusieurs numéros de téléphone nécessitent des types différents (par ex. phone et mobile).

Get Profile (spécifique au fournisseur)

Récupère un profil de contact spécifique à un fournisseur.

GET /crms/:crmId/provider/:providerRef/contactProfile/:profileRef
curl -X GET "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/contactProfile/profile-1@yourCrm" \
  -H "X-TIMUM-CLIENT-ID: your-api-key"

Erreurs

StatutCause
404Aucun profil trouvé avec cette référence

Create or Update Profile (spécifique au fournisseur)

Crée ou met à jour un profil de contact spécifique à un fournisseur.

POST /crms/:crmId/provider/:providerRef/contactProfile
curl -X POST "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/contactProfile" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "reference": "profile-1@yourCrm",
    "userReference": "user-123@yourCrm",
    "providerReference": "prov-001@yourCrm",
    "name": "Mustermann Immobilien - Vertrieb",
    "contactChannels": [
      {
        "label": "Hotline",
        "type": "phone",
        "value": "+49 30 12345678"
      },
      {
        "label": "Vertrieb",
        "type": "email",
        "value": "vertrieb@mustermann-immo.de"
      },
      {
        "label": "Büro",
        "type": "location",
        "value": "Musterstraße 28, 10115 Berlin"
      }
    ]
  }'

Request Body

ChampTypeObligatoireDescription
referencestringOuiRéférence unique du profil
userReferencestringOuiRéférence de l'utilisateur à qui appartient ce profil
providerReferencestringOuiRéférence du fournisseur auquel ce profil s'applique
namestringOuiNom d'affichage public
contactChannelsarrayOuiTableau de canaux de contact (voir Update General Profile)

Utilisation dans Resources/Appointments

Pour utiliser un profil, définissez ce qui suit lors de la création d'une ressource ou d'un rendez-vous :

  • contact : référence utilisateur
  • contactProfileReference : référence du profil

Le profil doit appartenir à l'utilisateur de contact et doit être valide pour le fournisseur dans lequel la ressource/le rendez-vous est créé.

Solution de repli :

Si aucun contactProfileReference n'est indiqué, le General Profile de l'utilisateur de contact est utilisé. Si aucun contact n'est indiqué, les informations du fournisseur sont affichées.

Étapes suivantes

Avec des Offerings configurées, vous pouvez désormais :

Sujets connexes