Webhooks

Webhooks allow you to build or set up integrations which subscribe to certain events on marktplaats.nl. When one of those events is triggered, we’ll send a HTTP POST payload to the webhook’s configured URL.

If you want to take advantage of this feature please speak to your Marktplaats contact person as it is currently not possible to register a webhook via the api. Though we may add support for this in the future.

Message Delivery Guarantees

We currently support At least once delivery. This means that messages are never lost but may be redelivered, under, what should be, very rare circumstances. To guard against this you can de-dupe messages on the consumer end based on the unique event id.

Validating the authenticity of requests

HTTP callbacks are signed so that consumers can validate the message’s authenticity. The signature is sent as a request header with the name X-Ecg-Signature. It’s value is a HMAC SHA 256 hex digest of the payload, using a shared secret, that will be provided to you as part of the registration process, as the key. The following example illustrates how to generate a signature using the openssl commandline tools.

echo -n '{"id":"id","eventType":"EventType","created":"2015-01-01T11:00:00.000Z","eventData":{"property":"value"}}' | openssl dgst -sha256 -hmac "s3cr3t"

c21dfb6001c97e8f6a9a47aec57f3e94f6e274928ec5724d0662927f87993f97

Generic Message format

Events posted to the webhook’s configured url all take the same form. But the event data and links provided in the request differ by event type.

field type constraints default Req W U
id string no no no
eventType string One of BidPlacedEvent, BidClosedEvent, AsqCreatedEvent, transactionStatusChanged no no no
created ISO 8601 timestamp no no no
eventData map no no no

id

Unique identifier for this event - can be used for de-duping purposes

eventType

Identifies the type of event, currently BidPlacedEvent, BidClosedEvent, AsqCreatedEvent, transactionStatusChanged are supported

created

When the event was created

eventData

Map of fields that describe the event. Different for each event type

BidPlacedEvent

The following table lists the event data fields for this event :

field type constraints default Req W U
advertisementItemId string no no no

advertisementItemId

Unique identifier for the advertisement this bid is for

The following table lists the relations for this event :

name availability embedded cardinality
mp:advertisement always no 1
mp:bid always yes 1

BidClosedEvent

The following table lists the event data fields for this event :

field type constraints default Req W U
advertisementItemId string no no no
closedBySeller boolean no no no

advertisementItemId

Unique identifier for the advertisement this bid is for

closedBySeller

True if the bid was closed by the seller

The following table lists the relations for this event :

name availability embedded cardinality
mp:advertisement always no 1
mp:bid always yes 1

AsqCreatedEvent

The following table lists the event data fields for this event :

field type constraints default Req W U
advertisementItemId string no no no
asqMessage string no no no

advertisementItemId

Unique identifier for the advertisement this ‘ask seller question’ is for

asqMessage

The actual message which is send. This is only provided for selected API users.

name availability embedded cardinality
mp:advertisement always no 1
mp:asker always yes 1

transactionStatusChanged

The following table lists the event data fields for this event :

field type constraints default Req W U
transactionId int no no no
oldStatus string no no no
newStatus string no no no

transactionId

Unique identifier for the transaction for which the status is changed

oldStatus

String representing the previous status of the transaction. One of CREATED, PENDING, EXPIRED, CANCELLED, COMPLETED, FAILED, REFUNDED, CHARGEBACK

newStatus

String representing the current status of the transaction. One of CREATED, PENDING, EXPIRED, CANCELLED, COMPLETED, FAILED, REFUNDED, CHARGEBACK

The following table lists the relations for this event :

name availability embedded cardinality
mp:advertisement-transaction always yes 1

CallNotificationEvent

The following table lists the event data fields for this event :

field type constraints default Req W U
start string no no no
duration string no no no
eventType string no no no
fromNumber string no no no
fromNumberArea string no no no
toNumber string no no no
endNumber string no no no
channel string no no no
answered boolean no no no
publisherId string no no no
campaignId string no no no
referrer string no no no
url string no no no
userId string no no no
advertisementId string no no no
callId string no no no
freespeeId string no no no

start

start time of call, UTC, format (ISO8601) yyyy-MM-dd’T’HH:mm:ss.SSSZZ

duration

duration of call in seconds

eventType

type of event 0 = post-call, 1 = textMessage/SMS, 2 = pre-call

fromNumber

callers phone number

fromNumberArea

callers geographical area

toNumber

tracking phone number

endNumber

destination phone number

channel

channel, ex Google SEM

answered

whether call was answered

publisherId

publisher id, if exists

campaignId

campaign id, if exists

referrer

visitor referrer url, if exists

url

visitor url, if exists

userId

marktplaats seller id

advertisementId

advertisement id

callId

Unique call id

freespeeId

Unique Freespee call id

Examples

Marktplaats sending an event notification

POST /path/url HTTP/1.1
Host: api.consumer.nl
Content-Type:application/hal+json
User-Agent: Marktplaats Webhooks Processor
X-Ecg-Signature: ba69edb0c8fa3f17d2b47f1edc8d53f3baa422dab250354200cc2528b8ba4dc5

{"_links":{"curies":[{"href":"https://api.marktplaats.nl/docs/v1/rels/{rel}.html","templated":true,"name":"mp"}],"mp:advertisement":{"href":"https://api.marktplaats.nl/v1/advertisements/m2087"}},"_embedded":{"mp:bid":{"_links":{"self":{"href":"https://api.marktplaats.nl/v1/advertisements/m2087/bids/190"},"mp:bidder":{"href":"https://api.marktplaats.nl/v1/users/2640"}},"id":190,"amount":1000,"bidder":{"id":2640,"nickName":"tu-2749237ff9be4d5c8d45c1a7a31"},"placeDate":"2015-01-29T10:30:56.000Z"}},"id":"0e4a7b5c-33b8-4e90-af97-f17365ea5d9f","eventType":"BidPlacedEvent","created":"2015-01-29T10:30:56.490Z","eventData":{"advertisementItemId":"m2087"}}

Example of a transaction changed notification

{
  "_links":{
    "curies":[
      {
        "href":"https://api.marktplaats.test/docs/v1/rels/{rel}.html",
        "templated":true,
        "name":"mp"
      }
    ]
  },
  "_embedded":{
    "mp:advertisement-transaction":{
      "_links":{
        "self":{
          "href":"https://api.marktplaats.test/v1/advertisements/m123456/transactions/123"
        }
      },
      "transactionId":123,
      "buyerId":2,
      "amount":200,
      "shippingCosts":140,
      "status":"COMPLETED"
    }
  },
  "id":"bb7b26cf-e4a8-40bb-8d1b-a1a7f0ba60b2",
  "eventType":"transactionStatusChanged",
  "created":"2015-01-01T12:00:00.321Z",
  "eventData":{
    "transactionId":123,
    "oldStatus":"CREATED",
    "newStatus":"COMPLETED"
  }
}

Example of a asq notification

{
    "_links":{
        "curies":[
            {
                "href":"https://api.marktplaats.test/docs/v1/rels/{rel}.html",
                "templated":true,
                "name":"mp"
            }
        ],
        "mp:advertisement":{
            "href":"https://api.marktplaats.test/v1/advertisements/m12"
        }
    },
    "_embedded":{
        "mp:asker":{
            "_links":{
                "self":{
                    "href":"https://api.marktplaats.test/v1/users/83"
                }
            }
        }
    },
    "id":"ad4a39f2-9bcc-4511-95f5-26d02cb020d2",
    "eventType":"AsqCreatedEvent",
    "created":"2016-02-10T16:08:21.069Z",
    "eventData":{
        "advertisementItemId":"m12",
        "asqMessage":"Example message"
    }
}