---
title: "Publish a new ad on the signed-in Quoka account. Beyond the shared fields, a category asks for its own (mileage, room count, size); those go in `attributes` under the portal's field names."
method: POST
path: "/v1/quoka/listings"
tags: ["Quoka"]
---

# Publish a new ad on the signed-in Quoka account. Beyond the shared fields, a category asks for its own (mileage, room count, size); those go in \`attributes\` under the portal's field names.

`POST /v1/quoka/listings`

## Request

- Base URL: `https://api.scraper-api.com`
- URL: `https://api.scraper-api.com/v1/quoka/listings`
- Auth: API key in header `x-api-key`

**Live endpoint.** Credit cost: **1** (1 request = 1 credit).

## Headers

- `x-session-id` string, required

## Request body

- object
  - `title` string, required: Headline of the ad.
  - `description` string, required: Body text of the ad.
  - `category_id` string: The portal's own category id, taken from its category picker. It has to be a LEAF category: markt.de answers a branch, or an id in the shorter form its public category pages use, with "Die Kategorie … konnte nicht zugeordnet werden" and publishes nothing. On Quoka the price field belongs to the category, so an ad with a price needs one.
  - `price` string: Asking price in EUR, as a plain number.
  - `price_type` 'FIXED' | 'NEGOTIABLE' | 'FREE' | 'ON_REQUEST': How the price is meant, where the portal offers a choice. Not every portal offers every one: neither markt.de nor Quoka has ON_REQUEST, and both answer with the choices they do have rather than publishing an ad with no price.
  - `location` string: Postcode, or postcode and city, of the ad. Quoka resolves it through its own place lookup and refuses one it does not know; add the district to pick a specific one (`30159 Mitte`).
  - `ad_type` 'OFFER' | 'REQUEST': An offer, or a wanted ad.
  - `phone` string: Contact phone number to publish with the ad.
  - `attributes` string: Category-specific form fields, keyed by the portal's own field name. Which ones a category asks for comes back from the portal when the category is picked.
  - `publish` 'true' | 'false': Publish the ad immediately, or park it as a draft where the portal offers both.
  - `captcha_token` string: reCAPTCHA token, where the portal's form demands one.

## Response `200`

Platform-native JSON payload (ScrapeCreators-compatible).

## Other responses

- `400`: Missing or invalid parameters.
- `401`: Missing or invalid API key.
- `402`: Not enough credits.
- `429`: Rate limit exceeded.
- `502`: Upstream scrape failed.

---

[API](https://skmtc.dev/scraper-api/apis/scraper-api-com-api.md) · [All operations](https://skmtc.dev/scraper-api/apis/scraper-api-com-api/llms.txt) · [OpenAPI document](https://skmtc.dev/scraper-api/apis/scraper-api-com-api/revisions/3c0343a0e65a?raw)
