You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This End User License Agreement (the "EULA") is entered into by and between the Real Estate Standards Organization ("RESO") and the person or entity ("End User") that is downloading or otherwise obtaining the product associated with this EULA ("RESO Product"). This EULA governs End Users use of the RESO Product and End User agrees to the terms of this EULA by downloading or otherwise obtaining or using the RESO Product.
With RESTful, JSON-based Web APIs, taking action on events during the transaction is difficult and not everyone implements the same API, meaning lots of custom integrations.
The goal of this proposal is to help facilitate bidirectional communication related to listings and other real estate data in a way that's easy to understand for both businesses and developers.
Section 2: Specification
This specification outlines how to use the W3C ActivityPub standard to make interactions threaded and more event based.
Section 2.1: Premarketing Activity
The Premarketing Activity consists of activities after the listing contract has been signed and prior to marketing.
A sample workflow might look similar to the following:
Agent starts record in their editor of choice. Enters relevant details about the listing contract.
Agent adds their own supplemental information about the listing and related information.
Agent publishes record with #premarketing and requests or subscribes to additional services to add information to the listing. Each additional actor will reply to the thread for the listing with a link containing data from the output of the task.
Agent will merge, modify, reject, or approve this data into the record, which will be stored in their own listing backend or cloud provider of choice.
Supplemental information or processes might be:
Internal brokerage rule validation and notifications
Public records integrations
Features and natural language descriptions generated from AI/ML
Fair Housing reserved words check
License verification
Flyers and upcoming tour information
CMA
MLS Validation
RESO Compliance
Initial Record Creation
Seller and seller's agent are doing work on the listing to prepare for marketing.
When a user creates a listing for premarketing, a minimal amount of information is needed to create a new listing thread.
The identity of the agent or broker. This could either be their license information or RESO Unique Licensee Identifier (ULI) or both. The office the agent is doing business for should also be included.
App or system-specific keys and modification timestamps.
Note that no "ListingId" will have been assigned at this point, which would happen after the MLS validates and receives the record for syndication.
Step 1: Create Record in RESO Common Format
User creates a record and posts to their system or cloud storage account. This could be done in an editor of their choice, which includes the listing input UIs currently offered.
REQUEST
User creates and posts initial record to their provider. The unparsed address is shown, but this could also be the parsed address if the application supports it.
The server responds with the StandardStatus and ListingUrl filled in, along with the updated record for convenience. Other relevant data could be included as well.
Once the data has been saved to the agent's input system, it can be published to the network and replied to. Whenever an ActivityPub client application creates new content, a request is sent to each actor's outbox on the ActivityPub server with the new object:
to - the account of the user to publish the record to
cc - the list of others to include in publication. This MUST always include the listing office URL. There are also two applications the agent requested to do work on listing during the premarketing stage.
url - the URL of the record provided in step (1).
attributedTo - a list of URLs or objects that the record is attributed to. This should include the agent, their office, and the applications that did work on the record. The URL might not be to an actor. It can be the completion of another activity.
RESPONSE
The ActivityPub server will respond with an activity wrapper that encapsulates the request. This activity and the nested object will then be sent to appropriate inboxes on the network via server-to-server communication:
Once the record has been published for premarketing, other apps will follow up in the thread with supplemental data related to the listing. In the previous example, both the AIPhotoApp and CountyAssessorApp were tagged.
Here is an sample request and response from AIPhotoApp, who posts a reply to the original message from the listing agent.
Once the listing has been completed by the third-party applications, the agent decides that the listing is ready for marketing.
The agent tags the MLS application with the #marketing hashtag in the Note:
The MLS application reviews the listing replies in the thread, with a Create notification for a Note.
If the record is accepted, the MLS will reply with the appropriate status in the thread and a link to the newly published record.
Otherwise, if it is rejected due to validation errors, the MLS will reply with the appropriate status and a link to a JSON
error payload. The MLS might consider adopting either Add/Edit (RCP-10), RESO Validation Expressions (RCP-19), or both, so clients can
validate records interactively outside of the network.
5.1: Record Passes Validation and is Published
When records pass validation, the MLS application will respond with a #published hashtag in the content of the Note.
When records fail validation, the MLS application will respond with a #rejected hashtag in the content of the Note and a link
to the error payload in the Add/Edit error format.
Syndication targets should provide marketing metrics back to the initial thread for tracking, which could be in the form of likes. However, if the provider doesn't want the stats in replies to the thread due to privacy they could be linked elsewhere using RESO Common Format and Tracking standards or sent directly to the agent's inbox.
Different audiences might have different views of the data (IDX, BBO, etc.) so DRM is probably something that needs to be addressed.
Section 2.2: Marketing Activity
MLS-approved applications may take action on the published listing, including CMA Applications, DOM Calculators, and Showing Service Applications.
For example, the workflow for scheduling showings could occur in the listing's thread as a communication between the Listing Agent and potential Buyer Agent, even across
separate showing applications.
Step 7: Showing App Requests Showing Appointment
The Buyer Agent uses their preferred showing application to request a showing. The application sends a new Note in the thread, with a #showingrequest hashtag in the content and a link to the showing request record.
The List Agent uses their registered showing application to accept the showing request. The application sends a new Note in the thread, with a #accepted hashtag in the content and a link to the new showing appointment record in their system.
Syndication targets should provide marketing metrics back to the initial thread for tracking, which could be in the form of likes. However, if the provider doesn't want the stats in replies to the thread due to privacy they could be linked elsewhere using RESO Common Format and Tracking standards or sent directly to the agent's inbox.
Different audiences might have different views of the data (IDX, BBO, etc.) so DRM is probably something that needs to be addressed.
Offers can be made for any listing in the #marketing phase. Anyone who has access to the listing thread should be able to make an offer. If the listing is being hosted on the broker's server, replies may either go to the MLS or brokerage.
Offers should be made either as a reply to the thread or potentially a direct message (as it may be more confidential). Auctions could be handled by replying to the thread.
When an offer is made, the listing agent should be notified.
When an Offer is accepted, the Listing Agent's application will reply to the original Offer in the thread with an Accept activity. The object of the Accept activity is the id of the original Offer.
The application can tag the Buyer Agent, the Mls Application, a Closing Application and any other entity/group on the network, to notify them that the Offer has been formally accepted.
For activities on existing objects, such as the Accept activity on this offer, the client will generate the Activity and POST it to the each actor's outbox (with no need for an extra wrapper from the server).
In the specification, the MLS server is shown as the primary ActivityPub server. However, brokerages could also run their own servers and then tag the MLS when the listing transitions to the marketing phase.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
RESO Listing Advertisement Endorsement
Josh Darnell
Chris Haran
Rick Herrera
Ranga Krishnan
Mark Lesswing
Catharine Macintosh
Paul Stusiak
RESO Common Format
RESO End User License Agreement (EULA)
This End User License Agreement (the "EULA") is entered into by and between the Real Estate Standards Organization ("RESO") and the person or entity ("End User") that is downloading or otherwise obtaining the product associated with this EULA ("RESO Product"). This EULA governs End Users use of the RESO Product and End User agrees to the terms of this EULA by downloading or otherwise obtaining or using the RESO Product.
Table of Contents
Section 1: Introduction
With RESTful, JSON-based Web APIs, taking action on events during the transaction is difficult and not everyone implements the same API, meaning lots of custom integrations.
The goal of this proposal is to help facilitate bidirectional communication related to listings and other real estate data in a way that's easy to understand for both businesses and developers.
Section 2: Specification
This specification outlines how to use the W3C ActivityPub standard to make interactions threaded and more event based.
Section 2.1: Premarketing Activity
The Premarketing Activity consists of activities after the listing contract has been signed and prior to marketing.
A sample workflow might look similar to the following:
#premarketingand requests or subscribes to additional services to add information to the listing. Each additional actor will reply to the thread for the listing with a link containing data from the output of the task.Supplemental information or processes might be:
Initial Record Creation
Seller and seller's agent are doing work on the listing to prepare for marketing.
When a user creates a listing for premarketing, a minimal amount of information is needed to create a new listing thread.
Step 1: Create Record in RESO Common Format
User creates a record and posts to their system or cloud storage account. This could be done in an editor of their choice, which includes the listing input UIs currently offered.
REQUEST
User creates and posts initial record to their provider. The unparsed address is shown, but this could also be the parsed address if the application supports it.
POST https://my.listingcloud.com{ "@reso.context": "urn:reso:metadata:2.0:resource:property", "UnparsedAddress": "123 Main Street, Anywhere USA, 12345", "AttributionContact": "email@me.com", "ListAgentStateLicense": "11111", "ListAgentUrl": "https://listing.network/BobAgent", "ListOfficeMlsId": "Broker1", "ListOfficeUrl": "https://listing.network/Broker1", "ListingContractDate": "2024-09-12", "ModificationTimestamp": "2024-09-13T18:56:20Z" }RESPONSE
The server responds with the StandardStatus and ListingUrl filled in, along with the updated record for convenience. Other relevant data could be included as well.
{ "@reso.context": "urn:reso:metadata:2.0:resource:property", "StandardStatus": "Incomplete", "ListingKey": "ABC123", "ListingUrl": "https://my.listingcloud.com/Property('ABC123')", "UnparsedAddress": "123 Main Street, Anywhere USA, 12345", "AttributionContact": "email@me.com", "ListAgentStateLicense": "11111", "ListAgentUli": "urn:reso:uli:1.0:442ed030-12a1-467b-8356-e330863865c3", "ListAgentUrl": "https://listing.network/BobAgent", "ListOfficeMlsId": "Broker1", "ListOfficeUrl": "https://listing.network/Broker1", "ListingContractDate": "2024-09-12", "ModificationTimestamp": "2024-09-13T18:58:22Z" }Step 2: POST to Network
Once the data has been saved to the agent's input system, it can be published to the network and replied to. Whenever an ActivityPub client application creates new content, a request is sent to each actor's outbox on the ActivityPub server with the new object:
REQUEST
POST https://listing.network{ "@context": "https://www.w3.org/ns/activitystreams", "type": "Note", "content": "#premarketing", "published": "2024-09-13T15:04:55Z", "to": ["https://listing.network/BobAgent"], "cc": [ "https://listing.network/AIPhotoApp", "https://listing.network/CountyAssessorApp" ], "url": { "type": "Link", "href": "https://my.listingcloud.com/Property('ABC123')", "mediaType": "application/json" }, "attributedTo": [ "https://listing.network/BobAgent", "https://listing.network/Broker1" ] }The request contains the following data:
to- the account of the user to publish the record tocc- the list of others to include in publication. This MUST always include the listing office URL. There are also two applications the agent requested to do work on listing during the premarketing stage.url- the URL of the record provided in step (1).attributedTo- a list of URLs or objects that the record is attributed to. This should include the agent, their office, and the applications that did work on the record. The URL might not be to an actor. It can be the completion of another activity.RESPONSE
The ActivityPub server will respond with an activity wrapper that encapsulates the request. This activity and the nested object will then be sent to appropriate inboxes on the network via server-to-server communication:
{ "@context": "https://www.w3.org/ns/activitystreams", "type": "Create", "id": "https://listing.network/BobAgent/133/1", "object": { "@context": "https://www.w3.org/ns/activitystreams", "id": "https://listing.network/BobAgent/133", "type": "Note", "content": "#premarketing", "published": "2024-09-13T15:04:55Z", "to": ["https://listing.network/BobAgent"], "cc": [ "https://listing.network/AIPhotoApp", "https://listing.network/CountyAssessorApp" ], "url": { "type": "Link", "href": "https://my.listingcloud.com/Property('ABC123')", "mediaType": "application/json" }, "attributedTo": [ "https://listing.network/BobAgent", "https://listing.network/Broker1" ] }, "published": "2024-09-13T15:04:57Z", "actor": [ "https://listing.network/BobAgent", "https://listing.network/MyListingApp" ], "to": ["https://listing.network/BobAgent"], "cc": [ "https://listing.network/AIPhotoApp", "https://listing.network/CountyAssessorApp" ] }Step 3: Data Added By Premarketing Application
Once the record has been published for premarketing, other apps will follow up in the thread with supplemental data related to the listing. In the previous example, both the AIPhotoApp and CountyAssessorApp were tagged.
Here is an sample request and response from AIPhotoApp, who posts a reply to the original message from the listing agent.
REQUEST
POST https://listing.network/BobAgent/133{ "@context": "https://www.w3.org/ns/activitystreams", "id": "https://aiphotoapp.com/23029Q4203", "type": "Note", "to": ["https://listing.network/BobAgent"], "published": "2024-09-13T15:05:20Z", "content": "Your AI generated listing data is ready!", "inReplyTo": "https://listing.network/BobAgent/133", "url": { "type": "Link", "href": "https://aiphotoapp.com/23029Q4203", "mediaType": "application/json" }, "attributedTo": ["https://listing.network/AIPhotoApp"] }RESPONSE
{ "@context": "https://www.w3.org/ns/activitystreams", "id": "https://aiphotoapp.com/23029Q4203/1", "type": "Create", "object": { "@context": "https://www.w3.org/ns/activitystreams", "id": "https://aiphotoapp.com/23029Q4203", "type": "Note", "to": ["https://listing.network/BobAgent"], "published": "2024-09-13T15:05:20Z", "content": "Your AI generated listing data is ready!", "inReplyTo": "https://listing.network/BobAgent/133", "url": { "type": "Link", "href": "https://aiphotoapp.com/23029Q4203", "mediaType": "application/json" }, "attributedTo": ["https://listing.network/AIPhotoApp"] }, "to": ["https://listing.network/BobAgent"], "actor": "https://listing.network/AIPhotoApp" }Step 4: Agent Notifies MLS
Once the listing has been completed by the third-party applications, the agent decides that the listing is ready for marketing.
The agent tags the MLS application with the
#marketinghashtag in the Note:REQUEST
POST https://listing.network{ "@context": "https://www.w3.org/ns/activitystreams", "type": "Note", "content": "#marketing", "published": "2024-09-13T15:010:53Z", "to": ["https://listing.network/BobAgent"], "cc": ["https://listing.network/MyMlsApp"], "inReplyTo": "https://listing.network/BobAgent/133", "attributedTo": [ "https://listing.network/BobAgent", "https://listing.network/Broker1" ] }RESPONSE
{ "@context": "https://www.w3.org/ns/activitystreams", "type": "Create", "id": "https://listing.network/BobAgent/134/1", "object": { "type": "Note", "id": "https://listing.network/BobAgent/134", "content": "#premarketing", "published": "2024-09-13T15:10:83Z", "to": ["https://listing.network/BobAgent"], "cc": ["https://listing.network/MyMlsApp"], "inReplyTo": "https://listing.network/BobAgent/133", "attributedTo": [ "https://listing.network/BobAgent", "https://listing.network/Broker1" ] }, "actor": [ "https://listing.network/BobAgent", "https://listing.network/MyListingApp" ], "to": ["https://listing.network/BobAgent"], "cc": ["https://listing.network/Broker1", "https://listing.network/MyMlsApp"] }Step 5: MLS Responds
The MLS application reviews the listing replies in the thread, with a
Createnotification for aNote.If the record is accepted, the MLS will reply with the appropriate status in the thread and a link to the newly published record.
Otherwise, if it is rejected due to validation errors, the MLS will reply with the appropriate status and a link to a JSON
error payload. The MLS might consider adopting either Add/Edit (RCP-10), RESO Validation Expressions (RCP-19), or both, so clients can
validate records interactively outside of the network.
5.1: Record Passes Validation and is Published
When records pass validation, the MLS application will respond with a
#publishedhashtag in thecontentof the Note.REQUEST
POST https://listing.network{ "@context": "https://www.w3.org/ns/activitystreams", "type": "Note", "published": "2024-09-13T15:11:39Z", "content": "#published", "to": ["https://listing.network/BobAgent"], "actor": "https://listing.network/MyMlsApp", "inReplyTo": "https://listing.network/BobAgent/133", "attributedTo": [ "https://listing.network/BobAgent", "https://listing.network/Broker1" ] }RESPONSE
POST https://listing.network{ "@context": "https://www.w3.org/ns/activitystreams", "type": "Create", "id": "https://listing.network/BobAgent/135/1", "object": { "@context": "https://www.w3.org/ns/activitystreams", "type": "Note", "id": "https://listing.network/BobAgent/135", "published": "2024-09-13T15:11:39Z", "content": "#published", "to": ["https://listing.network/BobAgent"], "actor": "https://listing.network/MyMlsApp", "inReplyTo": "https://listing.network/BobAgent/133", "attributedTo": [ "https://listing.network/MyMlsApp", "https://listing.network/BobAgent", "https://listing.network/Broker1" ] }, "to": ["https://listing.network/BobAgent"], "cc": ["https://listing.network/Broker1"], "actor": "https://listing.network/MyMlsApp", "inReplyTo": "https://listing.network/BobAgent/133" }5.2: Record Fails Validation
When records fail validation, the MLS application will respond with a
#rejectedhashtag in thecontentof the Note and a linkto the error payload in the Add/Edit error format.
REQUEST
POST https://listing.network{ "type": "Note", "to": ["https://listing.network/BobAgent"], "published": "2024-09-13T15:11:39Z", "content": "#rejected", "attributedTo": ["https://listing.network/MyMlsApp"], "url": { "type": "Link", "href": "https://my.mls.com/inputerrors/ABC123/00001.json", "mediaType": "application/json" } }REQUEST
POST https://listing.network{ "@context": "https://www.w3.org/ns/activitystreams", "type": "Create", "id": "https://my.mls.com/ABC123/00001/12/2", "to": ["https://listing.network/BobAgent"], "cc": ["https://listing.network/Broker1"], "actor": "https://listing.network/MyMlsApp", "inReplyTo": "https://listing.network/BobAgent/133", "object": { "type": "Note", "to": ["https://listing.network/BobAgent"], "id": "https://my.mls.com/ABC123/00001/12", "published": "2024-09-13T15:11:39Z", "content": "#rejected", "attributedTo": ["https://listing.network/MyMlsApp"], "url": { "type": "Link", "href": "https://my.mls.com/inputerrors/ABC123/00001.json", "mediaType": "application/json" } } }Step 6: Agent Fixes Errors and Notifies MLS
The agent corrects the errors and updates the listing, then notifies the MLS again.
REQUEST
POST https://listing.network{ "@context": "https://www.w3.org/ns/activitystreams", "type": "Note", "content": "#premarketing", "published": "2024-09-13T15:34:05Z", "to": ["https://listing.network/MyMlsApp"], "cc": ["https://listing.network/Broker1"], "inReplyTo": "https://listing.network/BobAgent/133", "attributedTo": [ "https://listing.network/BobAgent", "https://listing.network/Broker1", "https://listing.network/MyListingApp" ] }RESPONSE
{ "@context": "https://www.w3.org/ns/activitystreams", "type": "Create", "id": "https://listing.network/BobAgent/136/1", "object": { "type": "Note", "content": "#premarketing", "published": "2024-09-13T15:34:35Z", "id": "https://listing.network/BobAgent/136", "to": ["https://listing.network/MyMlsApp"], "cc": ["https://listing.network/Broker1"], "inReplyTo": "https://listing.network/BobAgent/133", "attributedTo": [ "https://listing.network/BobAgent", "https://listing.network/Broker1", "https://listing.network/MyListingApp" ], "url": { "type": "Link", "href": "https://my.mls.com/inputerrors/ABC123/00001.json", "mediaType": "application/json" } }, "actor": "https://listing.network/BobAgent", "to": ["https://listing.network/MyMlsApp"], "cc": ["https://listing.network/Broker1"] }Notes:
Section 2.2: Marketing Activity
MLS-approved applications may take action on the published listing, including CMA Applications, DOM Calculators, and Showing Service Applications.
For example, the workflow for scheduling showings could occur in the listing's thread as a communication between the Listing Agent and potential Buyer Agent, even across
separate showing applications.
Step 7: Showing App Requests Showing Appointment
The Buyer Agent uses their preferred showing application to request a showing. The application sends a new Note in the thread, with a
#showingrequesthashtag in the content and a link to the showing request record.REQUEST
{ "@context": "https://www.w3.org/ns/activitystreams", "type": "Note", "content": "#showingrequest", "url": { "type": "Link", "href": "https://showingapp1.com/requests/zi39kd93kfjdk0-39293", "mediaType": "application/json" }, "published": "2024-09-14T10:45:00Z", "to": ["https://listing.network/BobAgent"], "inReplyTo": "https://listing.network/BobAgent/133", "attributedTo": [ "https://listing.network/KimAgent", "https://listing.network/ShowingApp1" ] }RESPONSE
{ "@context": "https://www.w3.org/ns/activitystreams", "type": "Create", "id": "https://showingapp1.com/requests/zi39kd93kfjdk0-39293/32a", "object": { "@context": "https://www.w3.org/ns/activitystreams", "type": "Note", "id": "https://showingapp1.com/requests/zi39kd93kfjdk0-39293", "content": "#showingrequest", "url": { "type": "Link", "href": "https://showingapp1.com/appointments/zi39kd93kfjdk0-39293", "mediaType": "application/json" }, "published": "2024-09-14T10:45:00Z", "to": ["https://listing.network/BobAgent"], "inReplyTo": "https://listing.network/BobAgent/133", "attributedTo": [ "https://listing.network/KimAgent", "https://listing.network/ShowingApp1" ] }, "actor": [ "https://listing.network/KimAgent", "https://listing.network/ShowingApp1" ] }Step 8: Showing App Accepts Appointment
The List Agent uses their registered showing application to accept the showing request. The application sends a new Note in the thread, with a
#acceptedhashtag in the content and a link to the new showing appointment record in their system.REQUEST
{ "@context": "https://www.w3.org/ns/activitystreams", "type": "Note", "content": "#accepted", "url": { "type": "Link", "href": "https://showingapp2.com/appointments/1931148556193311", "mediaType": "application/json" }, "published": "2024-09-14T10:45:00Z", "to": ["https://listing.network/KimAgent"], "inReplyTo": "https://listing.network/BobAgent/133", "attributedTo": [ "https://listing.network/BobAgent", "https://listing.network/ShowingApp1" ] }RESPONSE
{ "@context": "https://www.w3.org/ns/activitystreams", "type": "Create", "id": "https://showingapp2.com/appointments/1931148556193311/a", "object": { "@context": "https://www.w3.org/ns/activitystreams", "type": "Note", "id": "https://showingapp2.com/appointments/1931148556193311", "content": "#accepted", "url": { "type": "Link", "href": "https://showingapp2.com/appointments/1931148556193311", "mediaType": "application/json" }, "published": "2024-09-14T10:45:00Z", "to": ["https://listing.network/KimAgent"], "inReplyTo": "https://listing.network/BobAgent/133", "attributedTo": [ "https://listing.network/BobAgent", "https://listing.network/ShowingApp1" ] }, "actor": [ "https://listing.network/BobAgent", "https://listing.network/ShowingApp2" ] }Notes:
Section 2.3: Offers Activity
For Offer activities, ActivityStreams provides an existing vocabulary.
#marketingphase. Anyone who has access to the listing thread should be able to make an offer. If the listing is being hosted on the broker's server, replies may either go to the MLS or brokerage.Step 9: Offers App Creates Offer
REQUEST
{ "@context": "https://www.w3.org/ns/activitystreams", "type": "Note", "content": "Offer of $530,000 contingent on inspection.", "published": "2024-09-15T14:02:00Z", "inReplyTo": "https://listing.network/BobAgent/133", "attributedTo": ["https://listing.network/MyOfferApp"], "to": ["https://listing.network/BobAgent"], "url": { "type": "Link", "href": "https://my.offercloud.com/offer/XYZ999", "mediaType": "application/json" } }RESPONSE
{ "@context": "https://www.w3.org/ns/activitystreams", "type": "Offer", "id": "https://my.offercloud.com/AmyAgent/133/24422", "object": { "@context": "https://www.w3.org/ns/activitystreams", "type": "Note", "id": "https://my.offercloud.com/offer/XYZ999", "content": "Offer of $530,000 contingent on inspection.", "published": "2024-09-15T14:02:00Z", "inReplyTo": "https://listing.network/BobAgent/133", "attributedTo": ["https://listing.network/MyOfferApp"], "to": ["https://listing.network/BobAgent"], "url": { "type": "Link", "href": "https://my.offercloud.com/offer/XYZ999", "mediaType": "application/json" } }, "actor": "https://listing.network/AmyAgent", "to": ["https://listing.network/BobAgent"], "published": "2024-09-15T14:02:00Z" }Step 10: Offer is Accepted
When an Offer is accepted, the Listing Agent's application will reply to the original Offer in the thread with an Accept activity. The object of the Accept activity is the id of the original Offer.
The application can tag the Buyer Agent, the Mls Application, a Closing Application and any other entity/group on the network, to notify them that the Offer has been formally accepted.
For activities on existing objects, such as the Accept activity on this offer, the client will generate the Activity and POST it to the each actor's outbox (with no need for an extra wrapper from the server).
REQUEST
{ "@context": "https://www.w3.org/ns/activitystreams", "type": "Accept", "published": "2024-09-15T16:15:00Z", "attributedTo": [ "https://listing.network/BobAgent", "https://listing.network/Broker1" ], "actor": "https://listing.network/BobAgent", "to": ["https://listing.network/AmyAgent"], "cc": ["https://listing.network/MyMlsApp"], "object": "https://listing.network/BobAgent/OfferXYZ999", "inReplyTo": "https://listing.network/BobAgent/133" }REQUEST
{ "@context": "https://www.w3.org/ns/activitystreams", "type": "Accept", "id": "https://listing.network/BobAgent/133/23", "published": "2024-09-15T16:15:00Z", "attributedTo": [ "https://listing.network/BobAgent", "https://listing.network/Broker1" ], "actor": "https://listing.network/BobAgent", "to": ["https://listing.network/AmyAgent"], "cc": ["https://listing.network/MyMlsApp"], "object": "https://listing.network/BobAgent/OfferXYZ999", "inReplyTo": "https://listing.network/BobAgent/133" }Section 3: Certification
To participate in a network, all providers and apps will be certified by RESO.
During the certification process:
Section 4. Contributors
Section 5: References
Section 6: Appendices
Section 6.1 - Brokerage ActivityPub Servers
In the specification, the MLS server is shown as the primary ActivityPub server. However, brokerages could also run their own servers and then tag the MLS when the listing transitions to the marketing phase.
Section 7: License
This document is covered by the RESO EULA.
Please contact RESO if you have any questions.
Beta Was this translation helpful? Give feedback.
All reactions