30 days free. No credit card. Full access from the moment you connect your site.

Start free trial

GeoDirectory Create Listing

geodirectory/create-listing creates a new directory listing.

Call geodirectory/list-listing-fields first. This is not politeness — the accepted keys genuinely cannot be known without it.

At a glance

Abilitygeodirectory/create-listing
ToolsetGeoDirectory — toolset/geodirectory
GroupGeoDirectory › Listings
RequiresAcrossAI Pro, plus GeoDirectory active on the site
Capabilitymanage_options
SafetyWrites data
RepeatableNot idempotent — each call changes the row set, so re-running is not a no-op
Ships inAcrossAI Pro 0.9.16 and later

Why the schema has to be read

GeoDirectory fields are defined per site and per listing type. There is no fixed schema to know in advance, which is why geodirectory/list-listing-fields is the call before any listing write: it returns the accepted keys, and each row’s name — its htmlvar_name — is what you write under.

On a default install the required set is title, content, post_category and street. On a real directory it is whatever the site decided, and a missing required field is a rejection rather than a partial save.

The address is the input people get wrong most. There is no address parameter: GeoDirectory explodes the address into street, city, region, country and zip, and those are the parameters.

City is auto-filled from the site default location when omitted, which is convenient on a single-city directory and wrong on any other.

Latitude and longitude are writable only when the address field has show_latlng enabled. Otherwise GeoDirectory geocodes from the address and ignores what you sent.

Site-defined fields go in the fields object keyed by htmlvar_name. They are sent as flat top-level parameters underneath, which is what GeoDirectory expects.

Not idempotent.

Input

NameTypeRequiredWhat it is
post_typestringNoListing type, for example gd_place. Defaults to the site default. See geodirectory/get-directory-overview for the valid values.
titlestringUsuallyListing title. post_title is an alias.
contentstringUsuallyListing description. post_content is an alias.
statusstringNoPost status. Publishing needs publish_posts.
authorintegerNoOwner user ID. A different owner needs edit_others_posts.
post_categoryarrayUsuallyCategory term IDs.
post_tagsstringNoComma-separated tag names.
streetstringUsuallyStreet address. There is no address parameter.
citystringNoCity. Auto-filled from the site default when omitted.
regionstringNoRegion or state.
countrystringNoCountry.
zipstringNoPostal code.
latitudenumberNoWritable only when the address field has show_latlng enabled.
longitudenumberNoSame condition as latitude.
fieldsobjectNoSite-defined custom fields keyed by htmlvar_name.

What comes back

NameTypeWhat it is
listingobjectThe created listing.
successbooleanWhether the call completed.
messagestringA one-line summary of what happened, suitable for showing a human.
error_codestringPresent only on failure — a stable machine-readable reason, such as a missing field, a wrong field type or an unmet confirmation.

Example

Ask your assistant:

Add a new restaurant listing.

It resolves to one call:

{
  "ability": "geodirectory/create-listing",
  "parameters": {
    "title": "The Avon Kitchen",
    "content": "Seasonal British cooking near the harbour.",
    "post_category": [12],
    "street": "14 Avon Street",
    "city": "Bristol",
    "fields": { "phone": "0117 496 0000" }
  }
}

Worth knowing

  • Read the field schema first. The accepted keys are site-defined.
  • No address parameter — the address is exploded into parts.
  • Omitting the city fills it from the site default location.
  • Coordinates only stick when the address field allows them.

Related abilities


Get the plugins:
AcrossAI Abilities Manager · AcrossAI MCP Manager

Browse the rest: Every ability, by category


Keep reading