Skip to content

Transfer a Prospect

When a prospect exists within a club network, they are linked to their original club. This documentation explains the prospect migration process, which enables controlled mobility of prospects within a club network.

Retrouvez ce scénario dans notre collection Bruno

Gagnez du temps dans votre implémentation en observant l'enchaînement des appels et en récupérant les requêtes directement depuis Bruno.

Migration Principle

Since a prospect record belongs to club A, if that same prospect wants to go to club B, they must start a migration process. From the prospect's point of view, this process is:

  • Start a migration request
  • Receive a confirmation code by SMS
  • Enter the confirmation code

Warning

The network headers to use for each call vary. The rule is to always use network headers from where the migration is intended to go: the destination club.

  • [Source club] Identify the contact you want to migrate
  • [Destination club] Initialize the migration
  • [Destination club] Validate the migration
  • [Destination club] Retrieve the updated contact in their new club

Initialize Migration

Prospect migration works by sending an SMS to the contact, containing a code that must be used in the next step.

Example

curl --request POST \
  --url https://gateway.prod.gravitee.stadline.tech/{{env}}/{{clientToken}}/contact_migration_requests \
  --header 'Authorization: Bearer {{jwtToken}}' \
  --header 'X-Gravitee-Api-Key: {{apiKey}}' \
  --header 'content-type: application/json' \
  --header 'x-user-club-id: {{clubTwoId}}' \ -- Destination club
  --header 'x-user-network-node-id: {{clubTwoNetworkNodeId}}' \ -- Destination club
  --data '{
  "contactId":"{{contactId}}", -- Contact identifier
  "clubId":"{{clubTwoId}}", -- Destination club
  "disableNetwork": true // Important for avoiding any issues with discovering entities across networks
}'

Response 201 Created

json5
{  
   "@context":"\/clientToken\/contexts\/SignatureRequest",
   v------ Migration request identifier ------v
   "@id":"\/clientToken\/signature_requests\/455434",
   "@type":"SignatureRequest",
  // ...
}

Complete the Migration Process

Once the SMS is received, the application orchestrating the migration must collect the code from the targeted contact and complete the signature process by validating this code.

POST /{clientToken}/signature_requests/{signatureRequestId}/transitions

parameterdescriptionexample
signatureRequestIdIdentifier of the signature process created previously3451
transitionDesired transition type. Possible values are validate or cancelvalidate
codeValidation code received by SMS1234

Example

curl --request POST \
  --url https://gateway.prod.gravitee.stadline.tech/{{env}}/{{clientToken}}/signature_requests/{{id}}/transitions \
  --header 'Authorization: Bearer {{jwtToken}}' \
  --header 'X-Gravitee-Api-Key: {{apiKey}}' \
  --header 'content-type: application/json' \
  --header 'x-user-club-id: {{clubOneId}}' \ -- Destination club
  --header 'x-user-network-node-id: {{clubOneNetworkNodeId}}' \ -- Destination club
  --data '{
    "transition": "validate",
    "code": "949875" -- Code received by SMS
    "disableNetwork": true // Important for avoiding any issues with discovering entities across networks
}'

Response 201 Created

json
{
  "@context": "/demoapi/contexts/SignatureRequest",
  "@id": "/demoapi/signature_requests/23716",
  "@type": "SignatureRequest",
  "state": "validated",
  // ...
  "targetIds": [
    "/demoapi/clubs/1357"
  ],
   v------ Identifier of the contact created in the destination club ------v
  "resultTargetId": "/demoapi/contacts/2973829"
}

Referenced Errors

400: Bad Request La ressource \"/{clientToken}/contacts/{id}\" n'existe pas.

This is related to data-sharing rules between clubs configured in a network. You are currently operating for a club that does not have the required rights to access the contact record to migrate.

Solution: If you are authenticated with client_credentials and provide node headers, operate from a level above the club node.

400: Bad Request api.error.contact.migration.club-not-valid

The target club is not valid. This occurs when migration is requested to the contact's current club.

Solution: Review the target club.

400: Bad Request api.error.contact.migration.contact-not-valid

The contact cannot be transferred. This occurs when the contact status is neither prospect nor former client.

Solution: Review the contact.