API Reference
Card exchange / Meet log
- GET
/card-exchanges/:exchangeIdGet a card exchangeReturn the exchange as seen by a participant. The requester polls this while waiting, and moves on with result once status becomes ACCEPTED. When result.candidateEvents has at least one event, ask where you met and record eventId with PATCH /meet-logs/:meetLogId (a single candidate is already recorded in result.eventId, so show it selected and send eventId: null if it is cleared). - POST
/card-exchangesStart a card exchange (scan)Send the token from the other person's My QR code (`https://4s.link/{slug}?ref=code&token=...`) to start a business card exchange. The response includes a summary of their profile to show on the request screen. The token proves the QR code was scanned in person, so a slug alone cannot start an exchange. Each user has at most one exchange in progress; starting a new one removes the previous one. When you scan a community's card QR code (`https://4s.link/communities/{communityId}?ref=code&token=...`, where the token belongs to the admin showing the card), send the community ID from the path as targetCommunityId. To request as a community you administer, send asCommunityId. - GET
/card-exchanges/currentGet the current card exchangeReturn the authenticated user's card exchange in progress, or null. Poll this while showing the My QR code, and open the confirmation screen when role is TARGET and status is PENDING. - PUT
/card-exchanges/:exchangeId/requestRequest a card exchangeAsk the scanned person to exchange cards (SCANNED → PENDING). A push notification is sent to their official app, and the request waits 3 minutes for approval. Any other exchange the person had in progress is removed. - PUT
/card-exchanges/:exchangeId/acceptAccept a card exchangeThe person who was asked accepts and completes the exchange. A meet log is recorded for each of the two people. If exactly one ongoing event has both people registered, it is recorded automatically as where you met. When one side exchanges as a community, that side's log becomes the community's log, shared by all current admins of the community. - PUT
/card-exchanges/:exchangeId/declineDecline a card exchangeThe person who was asked declines. The exchange is deleted, so the requester's GET /card-exchanges/:exchangeId returns 404. Declining an exchange that no longer exists also succeeds. - PUT
/card-exchanges/:exchangeId/cancelCancel a card exchangeThe requester cancels the exchange, before or after requesting. Canceling an exchange that no longer exists also succeeds. - GET
/meet-logs/contactsList exchanged contactsList the people you exchanged cards with, most recent first. Each person appears once no matter how many times you exchanged. By default only person-to-person exchanges are returned. includeCommunities=true mixes in the cards you exchanged with communities, and asCommunityId switches to the list of people that community exchanged with (admins only). - GET
/meet-logs/contacts/:userIdGet meet logs with a personReturn your meet logs with the given person (newest first) and the email sharing status. For someone you have not exchanged with, contact is null and meetLogs is empty. Only person-to-person exchanges are covered; exchanges with a community that the person handled as an admin are not included (see GET /meet-logs/communities/:communityId). With asCommunityId, returns that community's logs with the person (admins only). - PATCH
/meet-logs/contacts/:userIdChange email sharing for a personChoose whether to share your email address with the given person. You can change it per person at any time. - GET
/meet-logs/communities/:communityIdGet your card exchange with a communityReturn the authenticated user's card exchange with the given community: your sharing setting, the newsletter subscription and the logs. When you have not exchanged, or the community was deleted, contact is null and meetLogs is empty (no 404). The result does not depend on the community's visibility or on whether you are a member. Exchanging cards does not make you a member, and being a member does not subscribe you. - PATCH
/meet-logs/communities/:communityIdChange sharing and newsletter subscription for a communityChoose whether to share your email address with a community you exchanged cards with, and whether to receive its newsletter. While you receive the newsletter (subscribeNewsletter is true), your email address is disclosed to the community even if shareEmail is false. 4S does not send newsletters; the community's admins send them on their own, based on the subscription flag in the CSV. - PATCH
/meet-logs/:meetLogIdUpdate a meet logUpdate the memo or the event on your own meet log. The memo is visible only to you. The event must be one of the candidates (candidateEvents) from when you exchanged. - DELETE
/meet-logs/:meetLogIdDelete a meet logDelete a meet log. It is also removed from the other person's logs. Once all logs with a person are gone, they leave your contact list and email addresses are no longer visible. - POST
/meet-logs/exportEmail a CSV of contactsSend a download link for a CSV of your contacts (one row per person) to the authenticated user's email address. The link is valid for 24 hours. Your own CSV also contains the cards you exchanged with communities (told apart by the trailing Type column). With asCommunityId, the CSV lists the people that community exchanged with, including a Newsletter column.