Référence API

Authentification

Prérequis :
  • Pour utiliser cette API, vous devez nous contacter à contact@immosquare.com. Après vérification, nous vous fournirons apiKey et apiToken à inclure dans les headers de vos requêtes.
# POST
POST /path
Content-Type: application/json
apiKey: xz1232xzd213213er213213dczxcc3loizxzs12dczx
apiToken: xz1287xzdwer213213dczxcas12dczx

# GET
GET /path
apiKey: xz1232xzd213213er213213dczxcc3loizxzs12dczx
apiToken: xz1287xzdwer213213dczxcas12dczx

Codes HTTP

Nous utilisons des codes conventionnels de réponse HTTP pour indiquer le succès ou l'échec des requêtes.

💚 Succès (2xx)

HTTP Statut Description
200 - OK Succès de la requête

🚫 Erreurs client (4xx)

HTTP Statut Description
400 - Bad Request Paramètres manquants ou invalides
401 - Unauthorized API Key/token invalide
402 - Request Failed Requête valide mais échec du traitement
404 - Not Found Endpoint inexistant
429 - Too Many Requests Quota de requêtes dépassé

🔧 Erreurs serveur (5xx)

HTTP Statut Description
500, 502, 503, 504 - Server Errors Erreur technique interne

Versions

-10/03/2021 : Version 1.5 - Ajout de routes pour les VPC et assemblées de type VPC
-15/01/2021 : Version 1.3 - Ajout Belgique + date de validation des vpc + heure d'ouverture et fermeture de l'assemblée
-10/11/2020 : Version 1.2
-30/06/2020 : Version 1.1
-22/06/2020 : Version 1.0

Urls API

production france   : https://ag-connect.fr
staging france      : https://staging.ag-connect.fr
production belgique : https://ag-connect.be
staging belgique    : https://staging.ag-connect.be
production canada   : https://ag-connect.ca
staging canada      : https://staging.ag-connect.ca

Objets

Statut de l'assemblée

Nom Description
inpreparation Assemblée en préparation
validated Assemblée validée
convocked Assemblée convoquée
opening Assemblée ouverte
ongoing Assemblée en cours
completed Assemblée cloturée

Type d'assemblée

Nom Description
standard Assemblée classique
vpc Assemblée uniquement en vote par correspondance
council Conseils syndicaux et d'administrations

Type entité juridique

Nom Description
syndic_ca Canada : Syndic
association_ca Canada : Association
company_ca Canada : Entreprise
syndic_fr France : Syndic
association_fr France : Association
company_fr France : Entreprise
asl_fr France : ASL
aful_fr France : AFUL
rie_fr France : AGRIE
syndic_lu Luxembourg : Syndic
syndic_be Belgique : Syndic
grie_fr France : GRIE

Type de majorité

Nom Description
type_majority_1 Canada (copro) - Majorité absolue(1096)
type_majority_2 Canada (copro) - Majorité renforcée(1097)
type_majority_3 Canada (copro) - Double Majorité(1098,1102)
type_majority_4 Canada (copro) - Majorité simple(rattrapage)
type_majority_5 Canada (copro) - Unanimité
type_majority_6 France (copro) - Majorité simple(24)
type_majority_7 France (copro) - Majorité Absolue(25-1)
type_majority_8 France (copro) - Double majorité(26-1)
type_majority_9 France (copro) - Unanimité
type_majority_10 France (association & Entreprise) - Majorité simple (OUI > NON)
type_majority_11 France (association & Entreprise) - Majorité simple (OUI > 50% présents)
type_majority_12 France (association & Entreprise) - Majorité Absolue
type_majority_13 France (association & Entreprise) - Majorité qualifée (OUI > 75% présents)
type_majority_14 France (association & Entreprise) - Majorité qualifée (OUI > 75% clé de vote)
type_majority_15 France (copro) - Majorité Absolue(25) sans revote
type_majority_16 France (copro) - Double majorité(26) sans revote
type_majority_17 Luxembourg (copro) - Majorité simple(15) (OUI > NON)
type_majority_18 Luxembourg (copro) - Majorité Absolue(16) > 50% de l'ensemble de la clé de vote
type_majority_19 Luxembourg (copro) - Double majorité(17) >= 75% de l'ensemble de la clé de vote et +50% des copros
type_majority_20 Luxembourg (copro) - Unanimité
type_majority_21 Belgique (copro) - Majorité absolue (50 % + 1)
type_majority_22 Belgique (copro) - Majorité qualifiée des quatre cinquièmes (80 %)
type_majority_23 Belgique (copro) - Majorité qualifiée des deux tiers
type_majority_24 Belgique (copro) - Unanimité (100 %)
type_majority_25 Canada (Companie & Entreprise) - Majorité simple (OUI > 50% présents)
type_majority_26 Canada (Companie & Entreprise) - Majorité absolue (OUI > 50% de la clé de vote)
type_majority_27 Canada (Companie & Entreprise) - Majorité des deux tiers des présents
type_majority_28 Allemagne (copro) - Majorité simple + de 50 % des parties présentes
type_majority_29 Allemagne (copro) - Majorité qualifiée + de 75% des parties présentes
type_majority_30 Allemagne (copro) - Majorité absolue (100% des parties présentes)
type_majority_31 France (ASL) - 2/3 des voix de tous les membres
type_majority_32 France (ASL) - unanimité des membres
type_majority_33 France (ASL) - majorité absolue
type_majority_34 France (ASL) - double majorité
type_majority_35 France (ASL) - 2/3 des présents et représentés
type_majority_36 France (ASL) - 3/4 des voix de tous les membres
type_majority_37 France (ASL) - Majorité absolue Immeuble
type_majority_38 France (ASL) - Double maj, moitié en nombre + 2/3 des voix de tous les membres
type_majority_39 France (ASL) - Double maj (2e Conv), moitié en nombre + 2/3 des voix de tous les membres
type_majority_40 France (ASL) - Double maj, 2/3 des membres et 2/3 des voix
type_majority_41 France (ASL) - 3/4 des présents et représentés
type_majority_42 France (RIE) - Majorité des voix des membres présents et représentés
type_majority_43 France (RIE) - Majorité absolue
type_majority_44 France (RIE) - Double majorité
type_majority_45 France (RIE) - Vote propriétaire
type_majority_46 France (RIE) - Unanimité
type_majority_47 France (ASL) - Majorité des voix des membres présents et représentés
type_majority_48 France (AFUL) - 2/3 des voix de tous les membres
type_majority_49 France (AFUL) - unanimité des membres
type_majority_50 France (AFUL) - majorité absolue
type_majority_51 France (AFUL) - double majorité
type_majority_52 France (AFUL) - 2/3 des présents et représentés
type_majority_53 France (AFUL) - 3/4 des voix de tous les membres
type_majority_54 France (AFUL) - Majorité absolue Immeuble
type_majority_55 France (AFUL) - Double maj, moitié en nombre + 2/3 des voix de tous les membres
type_majority_56 France (AFUL) - Double maj (2e Conv), moitié en nombre + 2/3 des voix de tous les membres
type_majority_57 France (AFUL) - Double maj, 2/3 des membres et 2/3 des voix
type_majority_58 France (AFUL) - 3/4 des présents et représentés
type_majority_59 France (AFUL) - Majorité des voix des membres présents et représentés
type_majority_60 France (GRIE) - Majorité des voix des membres présents et représentés
type_majority_61 France (GRIE) - Majorité absolue
type_majority_62 France (GRIE) - Double majorité
type_majority_63 France (GRIE) - Vote propriétaire
type_majority_64 France (GRIE) - Unanimité

Type de participation

Nom Description
physically_present Présents physiquement
remotely_present Présents à distance
anticipation_vote Vote par correspondance
procuration_vote Vote par procuration

Type de convocation

Nom Description
internal Participants ayant droit de vote
external Participants n'ayant pas de droit de vote

Statut de la procuration

Nom Description
-1 En attente
0 Aucun statut
1 Procuration acceptée

Type de choix de vote

Nom Description
classic Vote par oui/non/abstention
custom Vote par choix multiples

Clean Datas Categories

Nom Description
present Calcul sur les présents
absent Calcul sur les absents
assembly Calcul sur l'assemblée
present_on_assembly Calcul sur les présents par rapport à l'assemblée
absent_on_assembly Calcul sur les absents par rapport à l'assemblée
no_vote Calcul sur les ne vote pas
no_vote_on_present Calcul sur les ne vote pas par rapport aux présents
no_vote_on_assembly Calcul sur les ne vote pas par rapport à l'assemblée
newsless Calcul sur les sans nouvelles
newsless_on_present Calcul sur les sans nouvelles par rapport aux présents
newsless_on_assembly Calcul sur les sans nouvelles par rapport à l'assemblée
yes Calcul sur les oui
yes_on_present Calcul sur les oui par rapport aux présents
yes_on_assembly Calcul sur les oui par rapport à l'assemblée
no Calcul sur les non
no_on_present Calcul sur les non par rapport aux présents
no_on_assembly Calcul sur les non par rapport à l'assemblée
abstention Calcul sur les abstention
abstention_on_present Calcul sur les abstention par rapport aux présents
abstention_on_assembly Calcul sur les abstention par rapport à l'assemblée

Timezone

Pris en charge
Australia/Adelaide
Australia/Broken_Hill
America/Anchorage
America/Juneau
America/Nome
America/Yakutat
Pacific/Gambier
Asia/Almaty
Europe/Amsterdam
Europe/Athens
America/Anguilla
America/Antigua
America/Argentina/San_Luis
America/Aruba
America/Asuncion
America/Barbados
America/Blanc-Sablon
America/Boa_Vista
America/Campo_Grande
America/Cuiaba
America/Curacao
America/Dominica
America/Eirunepe
America/Glace_Bay
America/Goose_Bay
America/Grenada
America/Guadeloupe
America/Guyana
America/Halifax
America/Manaus
America/Marigot
America/Martinique
America/Moncton
America/Montserrat
America/Porto_Velho
America/PortofSpain
America/Puerto_Rico
America/Rio_Branco
America/Santo_Domingo
America/St_Barthelemy
America/St_Kitts
America/St_Lucia
America/St_Thomas
America/St_Vincent
America/Thule
America/Tortola
Antarctica/Palmer
Atlantic/Bermuda
Atlantic/Stanley
Antarctica/McMurdo
Antarctica/South_Pole
Pacific/Auckland
Pacific/Funafuti
Pacific/Kwajalein
Pacific/Majuro
Pacific/Nauru
Pacific/Tarawa
Pacific/Wake
Pacific/Wallis
Atlantic/Azores
Asia/Baghdad
Asia/Baku
Asia/Dubai
Indian/Mahe
Indian/Mauritius
Indian/Reunion
Asia/Bangkok
Europe/Belgrade
Europe/Berlin
America/Bogota
Europe/Bratislava
Australia/Brisbane
Europe/Brussels
Europe/Bucharest
Europe/Budapest
America/Araguaina
America/Argentina/Buenos_Aires
America/Argentina/Catamarca
America/Argentina/Cordoba
America/Argentina/Jujuy
America/Argentina/La_Rioja
America/Argentina/Mendoza
America/Argentina/Rio_Gallegos
America/Argentina/Salta
America/Argentina/San_Juan
America/Argentina/Tucuman
America/Argentina/Ushuaia
America/Bahia
America/Belem
America/Cayenne
America/Fortaleza
America/Godthab
America/Maceio
America/Miquelon
America/Montevideo
America/Paramaribo
America/Recife
America/Santarem
America/Sao_Paulo
Antarctica/Rothera
Africa/Blantyre
Africa/Bujumbura
Africa/Cairo
Africa/Gaborone
Africa/Johannesburg
Africa/Kigali
Africa/Lubumbashi
Africa/Lusaka
Africa/Maputo
Africa/Maseru
Africa/Mbabane
Africa/Tripoli
Asia/Amman
Asia/Beirut
Asia/Damascus
Asia/Gaza
Asia/Nicosia
Europe/Chisinau
Europe/Kaliningrad
Europe/Kiev
Europe/Mariehamn
Europe/Simferopol
Europe/Uzhgorod
Europe/Zaporozhye
America/Scoresbysund
Atlantic/Cape_Verde
America/Caracas
Africa/Casablanca
America/Belize
America/Cancun
America/Chicago
America/Costa_Rica
America/El_Salvador
America/Guatemala
America/Indiana/Knox
America/Indiana/Tell_City
America/Managua
America/Matamoros
America/Menominee
America/Merida
America/North_Dakota/Center
America/NorthDakota/NewSalem
America/Rainy_River
America/Rankin_Inlet
America/Regina
America/Swift_Current
America/Tegucigalpa
America/Winnipeg
Pacific/Easter
Pacific/Galapagos
America/Chihuahua
Asia/Chongqing
Europe/Copenhagen
Australia/Darwin
Antarctica/Mawson
Asia/Bishkek
Asia/Dhaka
Asia/Karachi
Asia/Novokuznetsk
Asia/Omsk
Asia/Qyzylorda
Asia/Thimphu
Indian/Chagos
Europe/Dublin
America/Atikokan
America/Cayman
America/Detroit
America/Grand_Turk
America/Guayaquil
America/Havana
America/Indiana/Indianapolis
America/Indiana/Marengo
America/Indiana/Petersburg
America/Indiana/Vevay
America/Indiana/Vincennes
America/Indiana/Winamac
America/Iqaluit
America/Jamaica
America/Kentucky/Louisville
America/Kentucky/Monticello
America/Montreal
America/Nassau
America/New_York
America/Nipigon
America/Panama
America/Pangnirtung
America/Port-au-Prince
America/Resolute
America/Thunder_Bay
America/Toronto
Pacific/Fiji
Pacific/Guam
Africa/Harare
America/Adak
Pacific/Fakaofo
Pacific/Honolulu
Pacific/Johnston
Pacific/Rarotonga
Pacific/Tahiti
Europe/Helsinki
Australia/Hobart
Antarctica/Casey
Asia/Brunei
Asia/Choibalsan
Asia/Harbin
Asia/Hong_Kong
Asia/Kashgar
Asia/Kuching
Asia/Macau
Asia/Makassar
Asia/Manila
Asia/Shanghai
Asia/Ulaanbaatar
Asia/Irkutsk
Europe/Istanbul
Antarctica/Davis
Asia/Hovd
Asia/HoChiMinh
Asia/Jakarta
Asia/Phnom_Penh
Asia/Pontianak
Asia/Vientiane
Indian/Christmas
Asia/Jerusalem
Asia/Kabul
Asia/Kamchatka
Asia/Aqtau
Asia/Aqtobe
Asia/Ashgabat
Asia/Dushanbe
Asia/Oral
Asia/Samarkand
Asia/Yekaterinburg
Indian/Kerguelen
Indian/Maldives
Asia/Kathmandu
Asia/Kolkata
Asia/Krasnoyarsk
Asia/Kuala_Lumpur
Asia/Kuwait
America/La_Paz
America/Lima
Europe/Lisbon
Europe/Ljubljana
Africa/Abidjan
Africa/Accra
Africa/Bamako
Africa/Banjul
Africa/Bissau
Africa/Conakry
Africa/Dakar
Africa/El_Aaiun
Africa/Freetown
Africa/Lome
Africa/Nouakchott
Africa/Ouagadougou
Africa/Sao_Tome
America/Danmarkshavn
Antarctica/Vostok
Atlantic/Canary
Atlantic/Faroe
Atlantic/Madeira
Atlantic/Reykjavik
Atlantic/St_Helena
Europe/Guernsey
Europe/IsleofMan
Europe/Jersey
Europe/London
Europe/Madrid
Asia/Magadan
America/Mazatlan
Australia/Melbourne
America/Mexico_City
America/Noronha
Atlantic/South_Georgia
Europe/Minsk
Africa/Monrovia
America/Monterrey
Africa/Addis_Ababa
Africa/Asmara
Africa/DaresSalaam
Africa/Djibouti
Africa/Kampala
Africa/Khartoum
Africa/Mogadishu
Antarctica/Syowa
Asia/Aden
Asia/Bahrain
Asia/Qatar
Europe/Moscow
Europe/Samara
Indian/Antananarivo
Indian/Comoro
Indian/Mayotte
America/Boise
America/Cambridge_Bay
America/Dawson_Creek
America/Denver
America/Edmonton
America/Hermosillo
America/Inuvik
America/Ojinaga
America/Phoenix
America/Shiprock
America/Yellowknife
Asia/Colombo
Asia/Muscat
Africa/Nairobi
America/St_Johns
Asia/Novosibirsk
Pacific/Enderbury
Pacific/Tongatapu
America/Dawson
America/Los_Angeles
America/Santa_Isabel
America/Vancouver
America/Whitehorse
Pacific/Pitcairn
Africa/Algiers
Africa/Bangui
Africa/Brazzaville
Africa/Ceuta
Africa/Douala
Africa/Kinshasa
Africa/Lagos
Africa/Libreville
Africa/Luanda
Africa/Malabo
Africa/Ndjamena
Africa/Niamey
Africa/Porto-Novo
Africa/Tunis
Africa/Windhoek
Arctic/Longyearbyen
Europe/Andorra
Europe/Gibraltar
Europe/Luxembourg
Europe/Malta
Europe/Monaco
Europe/Oslo
Europe/Paris
Europe/Podgorica
Europe/San_Marino
Europe/Tirane
Europe/Vaduz
Europe/Vatican
Europe/Zurich
Australia/Perth
Pacific/Port_Moresby
Europe/Prague
Asia/Rangoon
Indian/Cocos
Europe/Riga
Asia/Riyadh
Europe/Rome
Pacific/Apia
Pacific/Midway
Pacific/Niue
Pacific/Pago_Pago
America/Santiago
Europe/Sarajevo
Asia/Seoul
Asia/Singapore
Europe/Skopje
Europe/Sofia
Asia/Anadyr
Pacific/Efate
Pacific/Guadalcanal
Pacific/Kosrae
Pacific/Noumea
Pacific/Ponape
Europe/Stockholm
Antarctica/DumontDUrville
Asia/Sakhalin
Australia/Currie
Australia/Lindeman
Australia/Sydney
Pacific/Saipan
Pacific/Truk
Asia/Taipei
Europe/Tallinn
Asia/Tashkent
Asia/Tbilisi
Asia/Tehran
America/Tijuana
Asia/Dili
Asia/Jayapura
Asia/Pyongyang
Asia/Tokyo
Pacific/Palau
Asia/Urumqi
Europe/Vienna
Europe/Vilnius
Asia/Vladivostok
Europe/Volgograd
Europe/Warsaw
Asia/Yakutsk
Asia/Yerevan
Europe/Zagreb

Détails d'une assemblée

Cette route vous permet d'otenir le détail d'une assemblée crée pour un de vos utilisateurs. L'id vous ait fourni au retour d'une création assemblée
Vous devez renseigner useruid qui va correspondre à l'uid de l'utilisateur dans votre système ainsi que votre uidprovider, ceci nous permettra de récupérer l'assemblée sur l'utilisateur correspondant.
Si il n'est pas trouvé ou non renseigné, la récupération de l'AG sera impossible.
Call
GET {base_url}/api/v1/assembly/
QUERY Parameters
Parameter Type Description
user_uid string Uid de l'utilisateur (ou plus exactement identifiant unique de l’agence) pour lequel vous voulez obtenir l'assemblée
uid_provider string Uid provider (identifiant unique du partenaire qui fait appel à l’API. Cet identifiant est fourni à la création du partenariat et ne pourra plus être modifié)
uid_assembly string Id (identifiant unique) de l'assemblée dans votre système
Réponse
{
  "user_uid": "G78965",
  "uid_provider": "crypto",
  "id": "8107c7251e2144e5277d7d055f9cd00d",
  "uid": "AG Test",
  "date": "2020-07-02",
  "time": "13:18:00",
  "time_zone": "Europe/Paris",
  "name": "Test france",
  "assembly_status": "completed",
  "opened_at": "2020-07-07T22:46:29.000+02:00",
  "closed_at": "2020-07-07T23:46:33.000+02:00",
  "first_vote_closed_at": "2020-07-07T22:54:29.000+02:00",
  "public_note": "",
  "location": "",
  "vpc_closed": "2020-07-04T22:54:29.000+02:00",
  "type_assembly": "standard",
  "anticipation_vote_mail": "something@something.fr",
  "communication_mail": "something@something.fr",
  "address": {
    "formatted": "",
    "street_number": "",
    "street_name": "",
    "zipcode": "",
    "locality": "",
    "sublocality": "",
    "latitude": null,
    "longitude": null,
    "administrative_area_level_1": "",
    "administrative_area_level_2": "",
    "country": ""
  },
  "entity": {
    "uid": null,
    "name": "Port Grimaud",
    "type_entity": "syndic_fr",
    "presential_allowed": 1,
    "distance_vote_allowed": 1,
    "multiple_keys_allowed": 1,
    "procuration_allowed": 1,
    "module_manager": 1,
    "entity_keys": [
      "clé a",
      "clé b",
      "clé c"
    ],
    "address": {
      "address1": "Place de l'église",
      "address2": "Port Grimaud",
      "city": "Grimaud",
      "country": "FR",
      "province": "",
      "zipcode": "83310"
    }
  },
  "documents": [],
  "participants": [
    {
      "uid": null,
      "identifier": "19v0qm",
      "access_code": "k0xadze",
      "type_participant": "anticipation_vote",
      "delegate_username": null,
      "procuration_status": 0,
      "type_convocation": "internal",
      "anticipation_vote_validation_at": "2020-07-07T22:46:33.000+02:00",
      "general_quotity": 1145.0,
      "participant_keys": {
        "clé a": 512.0,
        "clé b": 454.69,
        "clé c": 478.58
      },
      "first_name": "Michel",
      "last_name": "Dupont",
      "mobile": "060000000",
      "unit_name": "A548",
      "email": "email@example.com",
      "time_zone": "Europe/Paris",
      "avatar_url": null,
      "original_avatar_url": null,
      "address": {
        "address1": "Place de l'église",
        "address2": "Port Grimaud",
        "city": "Grimaud",
        "country": "FR",
        "province": "",
        "zipcode": "83310"
      },
      "signature": {
        "drawing": null,
        "ip": null,
        "datetime": null,
        "user_agent": null
      },
      "exit_live_datetime": null,
      "anticipation_votes": [
        {
          "resolution_uid": "123456",
          "answer": "yes",
          "vote_at": "2020-07-02T22:46:33.000+02:00"
        },
        {
          "resolution_uid": "123457",
          "answer": "no",
          "vote_at": "2020-07-02T22:46:33.000+02:00"
        },
        {
          "resolution_uid": "123458",
          "answer": "abstention",
          "vote_at": "2020-07-02T22:46:33.000+02:00"
        }
      ]
    }
  ],
  "resolutions": [
    {
      "uid": null,
      "type_majority": "type_majority_6",
      "is_votable": 1,
      "is_secret_vote": null,
      "title": "Test générale maj simple",
      "description": "",
      "comment": null,
      "internal_note": null,
      "vote_key": "general",
      "vote_choice_type": "classic",
      "vote_choice_number": null,
      "vote_choices": null,
      "vote_opened_at": "2020-06-10T13:55:43.000+02:00",
      "vote_closed_at": "2020-06-10T13:55:48.000+02:00",
      "vote_result": {
        "resolution_id": 72,
        "type_majority": "type_majority_6",
        "vote_choice_type": "classic",
        "accepted": false,
        "second_turn_allowed": null,
        "clean_datas": {
          "data": {
            "present": {
              "qp": "8635.58",
              "nb": "3.0",
              "header": true
            },
            "absent": {
              "qp": "0.0",
              "nb": "2.0",
              "header": true
            },
            "assembly": {
              "qp": "8635.58",
              "nb": "5.0",
              "header": true
            },
            "present_on_assembly": {
              "qp": "1.0",
              "nb": "0.6",
              "header": true
            },
            "absent_on_assembly": {
              "qp": "0.0",
              "nb": "0.4",
              "header": true
            },
            "no_vote": {
              "qp": 0,
              "nb": 0,
              "header": true
            },
            "no_vote_on_present": {
              "qp": "0.0",
              "nb": "0.0",
              "header": true
            },
            "no_vote_on_assembly": {
              "qp": "0.0",
              "nb": "0.0",
              "header": true
            },
            "newsless": {
              "qp": 0,
              "nb": 0,
              "header": true
            },
            "newsless_on_present": {
              "qp": "0.0",
              "nb": "0.0",
              "header": true
            },
            "newsless_on_assembly": {
              "qp": "0.0",
              "nb": "0.0",
              "header": true
            },
            "yes": {
              "qp": "1145.0",
              "nb": "1.0",
              "header": false
            },
            "yes_on_present": {
              "qp": "0.132590978255079566166951149",
              "nb": "0.333333333333333333",
              "header": false
            },
            "yes_on_assembly": {
              "qp": "0.132590978255079566166951149",
              "nb": "0.2",
              "header": false
            },
            "no": {
              "qp": "7490.58",
              "nb": "2.0",
              "header": false
            },
            "no_on_present": {
              "qp": "0.867409021744920433833048851",
              "nb": "0.666666666666666667",
              "header": false
            },
            "no_on_assembly": {
              "qp": "0.867409021744920433833048851",
              "nb": "0.4",
              "header": false
            },
            "abstention": {
              "qp": 0,
              "nb": 0,
              "header": false
            },
            "abstention_on_present": {
              "qp": "0.0",
              "nb": "0.0",
              "header": false
            },
            "abstention_on_assembly": {
              "qp": "0.0",
              "nb": "0.0",
              "header": false
            }
          },
          "list_data": {
            "username": {
              "yes": [
                "19v0qm"
              ],
              "no": [
                "ajvjj7",
                "vrnw9n"
              ],
              "abstention": [],
              "no_vote": [],
              "newsless": [],
              "absent": [
                "k9z1r7",
                "eqjajx"
              ]
            },
            "full_infos": {
              "yes": [
                "Michel Dupont #(A548)"
              ],
              "no": [
                "Jérôme Dupont #(A549)",
                "Henri Michel"
              ],
              "abstention": [],
              "no_vote": [],
              "newsless": [],
              "absent": [
                "Jérôme Chiron",
                "Jules Dupont"
              ]
            }
          },
          "list_opponent": {
            "username": [
              "19v0qm"
            ],
            "full_infos": [
              "Michel Dupont #(A548)"
            ]
          },
          "result": false
        },
        "raw_datas": {
          "qp": {
            "yes": "1145.0",
            "no": "7490.58",
            "abstention": 0,
            "no_vote": 0,
            "newsless": 0,
            "absent": "0.0"
          },
          "nb": {
            "yes": "1.0",
            "no": "2.0",
            "abstention": 0,
            "no_vote": 0,
            "newsless": 0,
            "absent": "2.0"
          }
        }
      },
      "documents": []
    }
  ]
}

Général

Node Type Description
user_uid uid Uid de l'utilisateur (ou plus exactement identifiant unique de l’agence) pour lequel vous voulez obtenir l'assemblée
id uuid Id dans notre système

Assemblée

Node Type Description
uid string Id (identifiant unique) de l'assemblée dans votre système
date date Date de l'assemblée (YYYY-MM-DD)
time time Heure de l'assemblée (HH:MM:SS)
time_zone string Objet Timezone
name string Nom de l'assemblée
assembly_status string Objet Statut de l'assemblée
opened_at datetime Date et heure de l'ouverture de l'assemblée
closed_at datetime Date et heure de fermeture de l'assemblée
first_vote_closed_at datetime Date et heure de fermeture du premier vote
public_note string Note publique de l'assemblée
location string Lieu de l'assemblée
vpc_closed datetime Date et heure de fermeture des votes par correspondance
type_assembly string Objet Type d'assemblée
anticipation_vote_mail string Email pour recevoir les notifications des votes par correspondance
communication_mail string Email pour recevoir les réponses des emails envoyés aux participants
address hash Objet Address
entity hash Objet Entité
documents array Objet Documents
participants array Objet Participants
resolutions array Objet Résolutions

Adresse

Node Type Description
formatted string Adresse complète
street_number string Numéro de voie
street_name string Nom de la voie
zipcode string Code postal
locality string Ville
sublocality string Quartier
latitude float Latitude
longitude float Longitude
administrative_area_level_1 string Département
administrative_area_level_2 string Région si disponible
country string Pays

Entité

Node Type Description
name string Nom de l'entité
immatriculation_number string Numéro d'immatriculation de l'entité
type_entity string Objet Type entité juridique
presential_allowed integer Si le vote pprésentiel est autorisé
distance_vote_allowed integer Si le vote par correspondance est autorisé
multiple_keys_allowed integer Si les clés multiples sont autorisées
procuration_allowed integer Si le vote par procuration est autorisée
module_manager integer Autoriser les participants à transmettre leur procuration au gestionnaire d’assemblée (0/1)
entity_keys array Liste des clefs multiples
address hash Adresse de l'entité
address1 string Adresse
address2 string Adresse complémentaire
city string Ville
country string Pays
province string Région
zipcode string Code postal

Documents

Node Type Description
name string Nom du document
content_type string Type de document
size integer Taille du document
url string Url du document (présignée, valable 1 heure)

Participants

Node Type Description
uid string Id (identifiant unique) du participant dans votre système
identifier string Identifiant de connexion
access_code string Code d'accès de connexion
type_participant string Objet Type de participation
delegate_username string Délégation au participant
procuration_status string Objet Statut de la procuration
type_convocation string Objet Type de convocation
anticipation_vote_validation_at datetime Date et heure d'enregistrement du vote par correspondance
general_quotity float Valeur de la clé générale
participant_keys hash Liste des clés secondaires et de leurs valeurs
first_name string Prénom
last_name string Nom
mobile string Numéro de téléphone mobile
unit_name string Numéros de lots
email string Email
lre integer Consentement LRE au format du paramètre d'import : 1 = consentement recueilli, -1 = refus, 0 = tout le reste — aucun consentement, mais aussi sollicitation en cours ou email en erreur. Lisez lre_status avant d'agir : une relance sur un 0 peut doubler une sollicitation déjà partie
lre_status string Détail du statut du consentement LRE : active (consentement recueilli), pending (sollicitation en cours), delegate (consentement déclaré par le partenaire ou le gestionnaire), removed (refus), bounce (email en erreur), null (aucun consentement connu)
time_zone string Objet Timezone
avatar_url string Url de la photo
original_avatar_url string Url originale de la photo
exit_live_datetime datetime Date et heure de sortie de l'assemblée
address hash Adresse du participant
address1 string Adresse
address2 string Adresse complémentaire
city string Ville
country string Pays
province string Région
zipcode string Code postal
signature hash Signature du participant
drawing string Image de la signature
ip string Ip
datetime string Date et heure
user_agent string User agent utilisé
anticipation_votes array Votes par anticipation
resolution_uid string Uid de la résolution
answer string Réponse à la résolution
vote_at datetime Date et heure du vote

Résolutions

Node Type Description
uid integer Id (identifiant unique) de la résolution dans votre système
number string Numéro d'affichage de la résolution
parent_resolution_uid string Uid de la résolution parente (null pour une résolution de premier niveau)
type_majority string Objet Type de majorité
is_votable integer Si votable
issecretvote integer Si est un vote à bulletin secret
title string Titre de la résolution
description string Description de la résolution
comment string Commentaires
internal_note string Note interne
vote_key string Clé utilisé sur le vote
vote_choice_type string Objet Type de choix de vote
vote_choice_number integer Nombre de réponses autorisée
vote_choices string Liste des choix proposées pour le vote séparé par une virgule (ex: 'Entreprise Joubert,Entreprise Lafont')
vote_opened_at datetime Date et heure d'ouverture du vote
vote_closed_at datetime Date et heure de fermeture du vote
vote_result hash Résultats du vote
resolution_id integer Id de la résolution
type_majority string Type de majorité
vote_choice_type string Type de choix de vote
accepted bool Si acceptée (true : acceptée, false: refusée, :null : sans décision)
second_turn_allowed bool Si un second tour est possible
clean_datas hash Résultats compilés
result bool Si la résolution est acceptée
datas hash Calculs compilés
_clean_datas_categories_ array Calcul sur la catégorie, voir Objet Clean data categories
qp float Total sur la clef
nb float Total sur le nombre de participants
header bool Data interne, ne sert pas
list_data hash Liste de noms par identifinats,noms et opposants
username_ hash Liste des noms par identifiants
yes array Liste des participants ayant voté oui
no array Liste des participants ayant voté non
abstention array Liste des participants ayant voté abstention
no_vote array Liste des participants ayant voté ne vote pas
newsless array Liste des participants présents mais sans nouvelles
absent array Liste des participants absent
_full_infos_ hash Liste des noms par prénoms/noms/n° de lot
yes array Liste des participants ayant voté oui
no array Liste des participants ayant voté non
abstention array Liste des participants ayant voté abstention
no_vote array Liste des participants ayant voté ne vote pas
newsless array Liste des participants présents mais sans nouvelles
absent array Liste des participants absent
list_opponent hash Liste des opposants
user_name array Liste des opposants par identifiants
full_infos array Liste des opposants par prénoms/noms/n° de lot
raw_datas hash Résultats bruts
qp hash Calcul sur la clé
yes float Sommes des oui
no float Sommes des non
abstention float Sommes des abstention
no_vote float Sommes des ne vote pas
newsless float Sommes des sans nouvelles
absent float Sommes des absent
nb hash Calcul sur le nombre de participants
yes float Sommes des oui
no float Sommes des non
abstention float Sommes des abstention
no_vote float Sommes des ne vote pas
newsless float Sommes des sans nouvelles
absent float Sommes des absent
documents array
name string Nom du document
content_type string Type de document
size integer Taille du document
url string Url du document (présignée, valable 1 heure)

Erreurs

{
  "errors": "Vous devez spécifier un user_uid",
  "errors": "Vous devez spécifier un uid_provider",
  "errors": "Cet user_uid ne correspond à aucun utilisateur sur votre accès"
}

Création d'une assemblée

Cette route vous permet de créer une assemblée.Vous devez renseigner 'user_uid' qui va correspondre à l'uid de l'utilisateur dans votre système, ceci nous permettra de créer l'assemblée sur l'utilisateur correspondant. Si il n'est pas trouvé ou non renseigné, la création de l'AG sera impossible.
Les AG, participants et résolutions sans uid ne seront pas importés, nous avons besoin des ces identifiants pour vous permettre de les mettre à jour. Attention les participants avec le même UID et email seront fusionnées.
Une AG peut être mis à jour avec sa liste de documents,.... uniquement si l'assemblée est toujours dans le statut En préparation. Si la requête est acceptée, nous importerons votre AG sur une tache planifiée immédiatement, vous pourrez ainsi la récupérez après quelques minutes.

HTTP Request (création)

POST {base_url}/api/v1/assembly

JSON Parameter (création)

Exemple
{
  "user_uid": "G78965",
  "uid_provider": "nom_provider",
  "uid": "AG37",
  "date": "2020-07-02",
  "time": "22:00:00",
  "time_zone": "Europe/Paris",
  "name": "Assemblée générale LES FLANERIES",
  "public_note": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
  "location": "Salle de la Pérouse",
  "type_assembly": "standard",
  "anticipation_vote_mail": "something@something.fr",
  "communication_mail": "something@something.fr",
  "address": {
    "formatted": "15, Place de l'église 31000 Toulouse",
    "street_number": "15",
    "street_name": "Place de l'église",
    "zipcode": "31000",
    "locality": "Toulouse",
    "sublocality": "",
    "latitude": 0.458282,
    "longitude": 15.4585,
    "administrative_area_level_1": "",
    "administrative_area_level_2": "",
    "country": "France"
  },
  "entity": {
    "uid": "EA4",
    "name": "LES FLANERIES",
    "type_entity": "syndic_fr",
    "presential_allowed": 0,
    "distance_vote_allowed": 0,
    "multiple_keys_allowed": 1,
    "procuration_allowed": 1,
    "module_manager": 1,
    "entity_keys": [
      "clé a",
      "clé b",
      "clé c"
    ],
    "address": {
      "formatted": "15, Place de l'église 31000 Toulouse",
      "address1": "Place de l'église",
      "address2": "",
      "city": "Toulouse",
      "country": "FR",
      "province": "",
      "zipcode": "31000"
    }
  },
  "documents": [
    {
      "name": "AG-CONNECT",
      "url": "https://url_photo_ag_connect.jpg"
    }
  ],
  "participants": [
    {
      "uid": "PA1",
      "type_convocation": "internal",
      "general_quotity": 1145.0,
      "participant_keys": {
        "clé a": 512.0,
        "clé b": 454.69,
        "clé c": 478.58
      },
      "first_name": "Michel",
      "last_name": "Dupont",
      "mobile": "0606060606",
      "unit_name": "A548",
      "email": "email@example.com",
      "time_zone": "Europe/Paris",
      "avatar_url": "https://https://url_photo_ag_connect.jpg",
      "LRE": 0,
      "address": {
        "formatted": "15, Place de l'église 31000 Toulouse",
        "address1": "Place de l'église",
        "address2": "Port Grimaud",
        "city": "Grimaud",
        "country": "FR",
        "province": "",
        "zipcode": "83310"
      }
    }
  ],
  "resolutions": [
    {
      "uid": "RO8",
      "type_majority": "type_majority_6",
      "is_votable": 1,
      "is_secret_vote": 1,
      "title": "Test générale maj simple",
      "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
      "comment": null,
      "internal_note": null,
      "vote_key": "general",
      "vote_choice_type": "classic",
      "vote_choice_number": null,
      "vote_choices": null,
      "documents": [
        {
          "name": "mls_logo.jpg",
          "url": "https://url_photo_ag_connect.jpg"
        },
        {
          "name": "mls_logo2.jpg",
          "url": "https://url_photo_ag_connect.jpg"
        }
      ]
    }
  ]
}
Node Type Description Requis
user_uid uid Uid de l'utilisateur (ou plus exactement identifiant unique de l’agence) pour lequel vous voulez obtenir l'assemblée requis
id uuid Id dans notre système

Assemblée (création)

Node Type Description Requis
uid string Id (identifiant unique) de l'assemblée dans votre système requis
date date Date de l'assemblée (YYYY-MM-DD) requis
time time Heure de l'assemblée (HH:MM:SS) requis
time_zone string Objet Timezone requis
name string Nom de l'assemblée. requis
public_note string Note publique de l'assemblée
location string Lieu de l'assemblée
type_assembly string Objet Type d'assemblée
anticipation_vote_mail string Email pour recevoir les notifications des votes par correspondance
communication_mail string Email pour recevoir les réponses des emails envoyés aux participants
address hash Objet Address
entity hash Objet Entité
documents array Objet Documents
participants array Objet Participants
resolutions array Objet Résolutions

Adresse (création)

Node Type Description
formatted string Adresse complète
street_number string Numéro de voie
street_name string Nom de la voie
zipcode string Code postal
locality string Ville
sublocality string Quartier
latitude float Latitude
longitude float Longitude
administrative_area_level_1 string Département
administrative_area_level_2 string Région si disponible
country string Pays

Entité (création)

Node Type Description requis
uid string Id (identifiant unique) de l'entité dans votre système requis
name string Nom de l'entité requis
type_entity string Objet Type entité juridique requis
presential_allowed integer Si le vote pprésentiel est autorisé
distance_vote_allowed integer Si le vote par correspondance est autorisé
multiple_keys_allowed integer Si les clés multiples sont autorisées
procuration_allowed integer Si le vote par procuration est autorisée
module_manager integer Autoriser les participants à transmettre leur procuration au gestionnaire d’assemblée (0/1)
entity_keys array Liste des clefs multiples
address hash Adresse de l'entité
address1 string Adresse
address2 string Adresse complémentaire
city string Ville
country string Pays
province string Région
zipcode string Code postal

Documents (création)

Node Type Description
name string Nom du document
url string Url du document ou nom du fichier présent dans le zip si via FTP

Participants (création)

Node Type Description Requis
uid string Id (identifiant unique) du participant dans votre système requis
type_convocation string Objet Type de convocation requis
general_quotity float Valeur de la clé générale requis
participant_keys hash Liste des clés secondaires et de leurs valeurs
first_name string Prénom
last_name string Nom requis
mobile string Numéro de téléphone mobile
unit_name string Numéros de lots
email string Email
time_zone string Objet Timezone requis
avatar_url string Url de la photo ou nom du fichier présent dans le zip si via FTP
lre integer Consentement LRE : 1 = consentement déjà recueilli chez vous (enregistré comme consentement délégué), -1 = refus (enregistré sans solliciter le participant), 0 ou absent = aucune action
address hash Adresse du participant
address1 string Adresse
address2 string Adresse complémentaire
city string Ville
country string Pays
province string Région
zipcode string Code postal

Résolutions (création)

Node Type Description Requis
uid string Id (identifiant unique) de la résolution dans votre système requis
number string Numéro d'affichage de la résolution
parent_resolution_uid string Uid de la résolution parente, pour une sous-résolution — la résolution parente doit figurer dans le même flux
type_majority string Objet Type de majorité requis
is_votable integer Si votable
is_secret_vote integer Si est un vote à bulletin secret
title string Titre de la résolution
description string Description de la résolution
comment string Commentaires
internal_note string Note interne
vote_key string Clé utilisé sur le vote requis
vote_choice_type string Objet Type de choix de vote requis
vote_choice_number integer Nombre de réponses autorisée
vote_choices string Liste des choix proposées pour le vote séparé par une virgule (ex: 'Entreprise Joubert,Entreprise Lafont')
documents array
name string Nom du document
url string Url du document ou nom du fichier présent dans le zip si via FTP

Réponse (création)

La requête acceptée répond en HTTP 202. import_uid est l'identifiant de corrélation de cet import : il vous permet de retrouver son résultat précis dans le journal d'importation (statut, éléments écartés, compteurs par section).
{
  "message": "Votre demande est en cours de traitement",
  "import_uid": "f0e6c1de-3f7a-4a4e-9c9d-1a2b3c4d5e6f"
}
Un élément invalide (participant incomplet, type de majorité inconnu, document sans URL...) n'annule pas l'import : il est écarté et journalisé dans les rejected_items du journal, et récapitulé dans l'email de retour envoyé à l'utilisateur. Une clé de répartition inconnue sur une résolution n'écarte pas la résolution : elle est importée sur la clé générale et signalée en avertissement (severity: "warning").
Le corps de la requête est limité à 10 Mo : au-delà, la requête est refusée en HTTP 413.

Erreurs (création)

{
  "errors": "Contenu trop volumineux : la limite est de 10 Mo par requête",
  "errors": "Un import est déjà en cours",
  "errors": "Vous devez spécifier un user_uid",
  "errors": "Vous devez spécifier un uid_provider",
  "errors": "Cet user_uid ne correspond à aucun utilisateur sur votre accès",
  "errors": "Cette assemblée n'a pas pu être crée",
  "errors": "Cette assemblée a déjà été validée, il n'est plus possible de lui apporter des modifications",
  "errors": "La date de l'assemblée est invalide",
  "errors": "L'heure de l'assemblée est invalide",
  "errors": "Le fuseau horaire de l'assemblée est invalide",
  "errors": "L'heure de l'assemblée est obligatoire",
  "errors": "La date de l'assemblée est obligatoire",
  "errors": "Le fuseau horaire de l'assemblée est obligatoire",
  "errors": "Aucun uid fourni pour cette assemblée",
  "errors": "Aucune entité juridique fournie",
  "errors": "Aucun uid fourni pour cette entité",
  "errors": "Entité juridique incorrect, voir Type Entité"
}

Import immédiat d'un fichier sur le FTP

Cette route vous permet de demander l'import immédiat d'un fichier que vous avez préalablement déposer sur notre FTP.

HTTP Request (import)

POST {base_url}/api/v1/assembly/import

QUERY Parameters (import)

Parameter Type Description
user_uid string Uid de l'utilisateur (ou plus exactement identifiant unique de l’agence) pour lequel vous voulez obtenir l'assemblée
uid_provider string Uid provider (identifiant unique du partenaire qui fait appel à l’API. Cet identifiant est fourni à la création du partenariat et ne pourra plus être modifié)
filename string Nom du fichier à importer ( ex: A7854provider1514515151.zip )

Réponse (import)

La requête acceptée répond en HTTP 202. Le flux FTP ne porte pas d'import_uid de corrélation : un même fichier peut produire plusieurs imports. Consultez le journal d'importation de chaque assemblée pour en connaître le résultat.
{
  "message": "Votre demande est en cours de traitement"
}

Erreurs (import)

{
  "errors": "Ce fichier n'existe pas sur le FTP",
  "errors": "Un import est déjà en cours"
}

Récupération des documents d'une assemblée

Cette route vous permet de récupérer le PV et la feuille de présence encodés en base 64 lorsqu'une AG est complétée. Les fichiers servis sont les documents publiés — exactement ceux diffusés aux copropriétaires, jamais une régénération. Si le gestionnaire a dépublié les documents, ou si le PV n'est pas encore rédigé, validé et signé, la requête est refusée en HTTP 409 avec un message explicite : réessayez plus tard.

HTTP Request (documents)

GET {base_url}/api/v1/assembly/documents

QUERY Parameters (documents)

Parameter Type Description
user_uid string Uid de l'utilisateur (ou plus exactement identifiant unique de l’agence) pour lequel vous voulez obtenir l'assemblée
uid_provider string Uid provider (identifiant unique du partenaire qui fait appel à l’API. Cet identifiant est fourni à la création du partenariat et ne pourra plus être modifié)
uid_assembly string Id (identifiant unique) de l'assemblée dans votre système

Réponse (documents)

Node Type Description
pv string PDF du procès-verbal publié, encodé en base 64 (null si absent)
timesheet string PDF de la feuille de présence publiée, encodé en base 64 (null si absent)
signed_documents array Documents signés pendant l'assemblée : id, name et pdf (base 64) — liste vide s'il n'y en a pas
{
  "pv": "JVBERi0xLjQKMSAwIG9iago8PAovVGl0bGUgKP7/KQovQ3JlYXRvciAo/v8A\ndwBrAGgAdABtAGwAdABvAHAAZABmACAAMAAuADEAMgAuADUpCi9Qcm9kdWNl\nciAo/....",
  "timesheet": "JVBERi0xLjQKMSAwIG9iago8PAovVGl0bGUgKP7/KQovQ3JlYXRvciAo/v8A\ndwBrAGgAdABtAGwAdABvAHAAZABmACAAMAAuADEAMgAuADUpCi9Qcm9kdWNl\nciAo/",
  "signed_documents": [
    {
      "id": 12345,
      "name": "Contrat de syndic",
      "pdf": "JVBERi0xLjQKMSAwIG9iago8PAovVGl0bGUgKP7/KQovQ3JlYXRvciAo/v8A\ndwBrAGgAdABtAGwAdABvAHAAZABmACAAMAAuADEAMgAuADUpCi9Qcm9kdWNl\nciAo/"
    }
  ]
}

Erreurs (documents)

{
  "errors": "Vous devez spécifier un user_uid",
  "errors": "Vous devez spécifier un uid_provider",
  "errors": "Cet user_uid ne correspond à aucun utilisateur sur votre accès",
  "errors": "Cette assemblée est introuvable pour cet utilisateur",
  "errors": "Assemblée non cloturée",
  "errors": "Les documents de cette assemblée ne sont pas encore publiés",
  "errors": "Les documents de cette assemblée ont été dépubliés par le gestionnaire"
}
Code HTTP Cas
404 Utilisateur ou assemblée introuvable
409 Assemblée non clôturée, documents pas encore publiés ou dépubliés par le gestionnaire

Enregistrement d'un vote par correspondance pour un participant

Cette route vous permet d'enregistrer un vote par par correspondance pour un participant. Si aucune erreur est retournée, les votes sont enregistrés et validés sur Ag connect. Si une erreur apparaît, les votes valides seront enregistrés mais le vpc ne sera pas validé.

HTTP Request (vpc)

POST {base_url}/api/v1/assembly/import/vpc

JSON Parameter (vpc)

{
  "user_uid": "XXXXXXXX",
  "uid_provider": "name_provider",
  "uid_assembly": "AGVPC",
  "uid_participant": "1",
  "signature_drawing": "image_en_base64",
  "signature_datetime": "2021-07-07T22:46:29.000+02:00",
  "signature_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/53736",
  "signature_user_ip": "259.259.259.259",
  "resolutions": [
    {
      "uid": "1",
      "answer_classic": "yes"
    },
    {
      "uid": "2",
      "answer_classic": "no"
    },
    {
      "uid": "3",
      "answer_classic": "abstention"
    },
    {
      "uid": "4",
      "answer_custom": "1,2,3,4"
    }
  ]
}

Type de réponse answer_classic (vpc)

Code Type Description
yes string Oui à la résolution
no string Non à la résolution
abstention string Abstention à la résolution

Type de réponse answer_custom (vpc)

Dans ce cas précis, la résolution est sur une question à choix multiples, il suffit de renseigner les choix possibles séparés par une ,
Les choix transmis doivent tous figurer parmi ceux ouverts par la résolution, et leur nombre ne doit pas dépasser le maximum qu'elle autorise. Un seul choix inconnu rejette le vote entier : les autres choix ne sont pas enregistrés à sa place, car un bulletin amputé serait indistinguable d'un vote réellement exprimé au moment du dépouillement. Le vote apparaît alors dans le journal d'importation en rejected, et il vous suffit de corriger le flux puis de rejouer l'appel.
Node Type Description Requis
user_uid string Uid de l'utilisateur (ou plus exactement identifiant unique de l’agence) pour lequel vous voulez obtenir l'assemblée
uid_provider string Uid provider (identifiant unique du partenaire qui fait appel à l’API. Cet identifiant est fourni à la création du partenariat et ne pourra plus être modifié)
uid_assembly string Id (identifiant unique) de l'assemblée dans votre système
uid_participant uuid Id du participant dans votre système
signature_drawing string Image de la signature du participant en base 64
signature_datetime datetime Date de la signature du participant
signature_user_agent string User agent utilisé lors de la signature
signature_user_ip string IP utilisé lors de la signature
resolutions array Liste des résolutions
uid uuid Id de la résolution dans votre système
answer_classic string Objet Type de réponse answer_classic
answer_custom string Objet Type de réponse answer_custom

Réponse (vpc)

Le statut HTTP porte le verdict : 200 si le vote est enregistré et validé, 422 sinon. Le corps est identique dans les deux cas : success (booléen), errors, une liste de messages en texte brut — des avertissements peuvent accompagner un succès (par exemple un vote invalide retombé en abstention) — et import_uid, l'identifiant de corrélation qui permet de retrouver l'entrée correspondante dans le journal d'importation.
{
  "success": true,
  "errors": [],
  "import_uid": "3f1c2a9e-6f6b-4c1e-9a3d-2b8e4f5a6c7d"
}

Erreurs (vpc)

En HTTP 422 :
{
  "success": false,
  "errors": [
    "Resolution with uid '3': Invalid vote, 'ne se prononce pas' doesn't exist, vote will be 'abstention'",
    "Resolution with uid 's' doesn't exist, skipping !"
  ],
  "import_uid": "3f1c2a9e-6f6b-4c1e-9a3d-2b8e4f5a6c7d"
}
Une assemblée ou un participant introuvables répondent en HTTP 404 ("Cette assemblée est introuvable pour cet utilisateur", "Ce participant est introuvable sur cette assemblée").

Enregistrement d'un vote par correspondance pour plusieurs participants

Cette route vous permet d'enregistrer un vote par par correspondance pour plusieurs participants. Une tâche de fond sera lancé par Ag connect pour importer les votes. Il vous faudra consulter les logs ensuite pour avoir le retour de l'importation.

HTTP Request (vpcm)

POST {base_url}/api/v1/assembly/import/vpcs

JSON Parameter (vpcm)

{
  "user_uid": "54X99996",
  "uid_provider": "crypto",
  "uid_assembly": "AGVPC",
  "participants": [
    {
      "uid_participant": "1",
      "signature_drawing": "image_en_base64",
      "signature_datetime": "2021-07-07T22:46:29.000+02:00",
      "signature_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/53736",
      "signature_user_ip": "127.0.0.1",
      "resolutions": [
        {
          "uid": "1",
          "answer_classic": "yes",
          "answer_custom": "1,2,3,4"
        },
        {
          "uid": "2",
          "answer_classic": "no",
          "answer_custom": "1,2,3,4"
        },
        {
          "uid": "3",
          "answer_classic": "abstention",
          "answer_custom": "1,2,3,4"
        },
        {
          "uid": "s",
          "answer_classic": "abstention",
          "answer_custom": "1,2,3,4"
        },
        {
          "uid": "4",
          "answer_classic": "michel",
          "answer_custom": "1"
        }
      ]
    },
    {
      "uid_participant": "2",
      "signature_drawing": "image_en_base64",
      "signature_datetime": "2021-07-07T22:46:29.000+02:00",
      "signature_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/53736",
      "signature_user_ip": "127.0.0.1",
      "resolutions": [
        {
          "uid": "1",
          "answer_classic": "yes",
          "answer_custom": "1,2,3,4"
        },
        {
          "uid": "2",
          "answer_classic": "no",
          "answer_custom": "1,2,3,4"
        },
        {
          "uid": "3",
          "answer_classic": "abstention",
          "answer_custom": "1,2,3,4"
        },
        {
          "uid": "4",
          "answer_classic": "yes",
          "answer_custom": "1,2,3,4,5,6"
        }
      ]
    }
  ]
}

Type de réponse answer_classic (vpcm)

Code Type Description
yes string Oui à la résolution
no string Non à la résolution
abstention string Abstention à la résolution

Type de réponse answer_custom (vpcm)

Dans ce cas précis, la résolution est sur une question à choix multiples, il suffit de renseigner les choix possibles séparés par une ,
Les choix transmis doivent tous figurer parmi ceux ouverts par la résolution, et leur nombre ne doit pas dépasser le maximum qu'elle autorise. Un seul choix inconnu rejette le vote entier : les autres choix ne sont pas enregistrés à sa place, car un bulletin amputé serait indistinguable d'un vote réellement exprimé au moment du dépouillement. Le vote apparaît alors dans le journal d'importation en rejected, et il vous suffit de corriger le flux puis de rejouer l'appel.
Node Type Description
user_uid string Uid de l'utilisateur (ou plus exactement identifiant unique de l’agence) pour lequel vous voulez obtenir l'assemblée
uid_provider string Uid provider (identifiant unique du partenaire qui fait appel à l’API. Cet identifiant est fourni à la création du partenariat et ne pourra plus être modifié)
uid_assembly string Id (identifiant unique) de l'assemblée dans votre système
uid_participant uuid Id du participant dans votre système
signature_drawing string Image de la signature du participant en base 64
signature_datetime datetime Date de la signature du participant
signature_user_agent string User agent utilisé lors de la signature
signature_user_ip string IP utilisé lors de la signature
resolutions array Liste des résolutions
uid uuid Id de la résolution dans votre système
answer_classic string Objet Type de réponse answer_classic
answer_custom string Objet Type de réponse answer_custom

Réponse (vpcm)

La requête acceptée répond en HTTP 202. import_uid est l'identifiant de corrélation de cette importation : le résultat est à consulter dans le journal d'importation, où il permet de retrouver l'entrée correspondante.
{
  "message": "Votre demande est en cours de traitement",
  "import_uid": "3f1c2a9e-6f6b-4c1e-9a3d-2b8e4f5a6c7d"
}

Erreurs (vpcm)

Code HTTP Cas
400 uid_assembly, user_uid ou uid_provider absent
403 Le uid_provider fourni ne correspond pas aux identifiants API utilisés (apiKey)
404 Utilisateur ou assemblée introuvable
409 L'assemblée n'est pas au statut convoquée

Journal d'importation

Cette route vous permet de consulter le journal d'importation sur une assemblée : le statut de chaque import, les éléments écartés ou importés avec adaptation, et les compteurs reçus/importés par section. L'import_uid rendu au moment de la création vous permet de retrouver l'entrée correspondant à votre requête.

HTTP Request (journal)

GET {base_url}/api/v1/assembly/log

QUERY Parameters (journal)

Parameter Type Description
user_uid string Uid de l'utilisateur (ou plus exactement identifiant unique de l’agence) pour lequel vous voulez obtenir l'assemblée
uid_provider string Uid provider (identifiant unique du partenaire qui fait appel à l’API. Cet identifiant est fourni à la création du partenariat et ne pourra plus être modifié)
uid_assembly string Id (identifiant unique) de l'assemblée dans votre système

Réponse (journal)

Chaque entrée de logs décrit un import, du plus récent au plus ancien :
Node Type Description
import_uid uuid Identifiant de corrélation de l'entrée. Il vous est rendu à l'acceptation de la requête sur la création d'assemblée et les votes par correspondance ; sur les imports FTP il existe mais ne vous est pas communiqué, le dépôt d'un fichier ne donnant pas lieu à une réponse. Null sur les imports antérieurs à ce suivi
status string pending (en attente), running (en cours), success (tout importé), partial (au moins un élément écarté ou adapté), failed (import en échec)
with_errors integer Signal binaire historique : 1 dès qu'un élément est en erreur ou n'a pas pu être validé, y compris quand le reste de l'import est passé. Il ne dit pas que l'import a échoué — pour le verdict, lisez status
started_at datetime Début du traitement
finished_at datetime Fin du traitement
rejected_items array Éléments écartés ou adaptés — voir ci-dessous
sections_counts hash Compteurs received / imported par section (participant, resolution, assembly_document, resolution_document, vote) ; section absente si rien reçu
log string Journal technique détaillé
Chaque élément de rejected_items :
Node Type Description
type string participant, resolution, assembly_document, resolution_document ou vote (imports de votes par correspondance)
uid string Uid de l'élément dans votre système (null s'il n'a pas pu être lu)
label string Libellé de l'élément (nom, titre...)
severity string rejected = non importé, warning = importé mais adapté (ex : clé de répartition remplacée par la générale)
reason string Motif en langage métier
{
  "uid": "AGVPC",
  "logs": [
    {
      "import_uid": "f0e6c1de-3f7a-4a4e-9c9d-1a2b3c4d5e6f",
      "status": "partial",
      "with_errors": 0,
      "started_at": "2026-08-17T08:54:47.000+02:00",
      "finished_at": "2026-08-17T08:54:49.000+02:00",
      "rejected_items": [
        {
          "type": "resolution",
          "uid": "R1",
          "label": "Travaux toiture",
          "severity": "warning",
          "reason": "Clé de répartition CLE-TOITURE inconnue, la clé générale a été utilisée à la place"
        },
        {
          "type": "resolution",
          "uid": "R2",
          "label": "Budget prévisionnel",
          "severity": "rejected",
          "reason": "Type de majorité inconnu : majorite_bidon"
        }
      ],
      "sections_counts": {
        "participant": {"received": 3, "imported": 3},
        "resolution": {"received": 3, "imported": 2}
      },
      "log": "==============================\nStarting entity\n=============================="
    },
    {
      "import_uid": "3f1c2a9e-6f6b-4c1e-9a3d-2b8e4f5a6c7d",
      "status": "partial",
      "with_errors": 1,
      "started_at": "2026-08-17T09:12:03.000+02:00",
      "finished_at": "2026-08-17T09:12:04.000+02:00",
      "rejected_items": [
        {
          "type": "vote",
          "uid": "R4",
          "label": "Michel Dupont",
          "severity": "rejected",
          "reason": "La résolution n'existe pas sur cette assemblée"
        },
        {
          "type": "participant",
          "uid": "1",
          "label": "Michel Dupont",
          "severity": "warning",
          "reason": "Des votes sont en erreur, le vote par correspondance n'a pas été validé pour ce participant"
        }
      ],
      "sections_counts": {
        "participant": {"received": 2, "imported": 1},
        "vote": {"received": 8, "imported": 7}
      },
      "log": "==============================\nVPC Import worker started 17 August 2026 at 09:12\n=============================="
    }
  ]
}

Import via FTP

Introduction (ftp_import)

Il est possible d'importer les assemblée générales d'un client via FTP en nous déposant un fichier zip contenant un JSON correspondant à l'AG à importer et ses documents associés. Pour utiliser le FTP, vous devez nous contacter à info@ag-connect.com. Après vérification nous vous fourniront un login/pass pour déposez votre fichier.

Nom de fichier (ftp_import)

Le nom du fichier zip doit être de la forme uid_user_provider_timestamp.zip (ex: G7854provider1025110211.zip). Le fichier JSON requis est le même modèle que celui utilisé pour l'API.
Les documents importables sont limités à une taille maximum de 20mo.

Prise en compte des documents/avatars (ftp_import)

Il suffit de mettre le nom du fichier à la place d'une url pour les documents des AG, des résolutions et des avatar pour les copropriétaires.