Listings
In Directify, listings are the items that appear in your directory. These can be tools, services, products, or any other items you want to showcase. The API endpoints use “projects” in the URL, but they refer to listings in your directory.Get Directory Listings
Retrieve all listings for a specific directory with pagination.directory_id(integer, required): The ID of the directorypage(integer, optional): Page number for pagination (default: 1)
Get Single Listing
Retrieve a specific listing by ID.directory_id(integer, required): The ID of the directoryproject_id(integer, required): The ID of the listing
Check Listing Exists
Check if a listing with a specific URL already exists in the directory.directory_id(integer, required): The ID of the directory
Create Listing
Create a new listing in the directory.directory_id(integer, required): The ID of the directory
Linking organizers: Pass
organizers as an array of organizer IDs to associate the listing with one or more organizers (agencies, studios, event hosts, etc.). Only organizers belonging to the same directory are linked — any IDs from another directory are silently ignored. Fetch available IDs with GET /api/directories/{directory_id}/organizers.Expiring listings:
starts_at and ends_at control when a listing is visible. A listing with a starts_at in the future stays hidden until that moment, and once ends_at passes it is either badged as expired or hidden entirely — depending on the directory’s expiring listings setting. Both are optional; omit them and the listing is live immediately and never expires. Accepts any date format PHP can parse, e.g. 2026-08-01 09:00:00 or 2026-08-01T09:00:00Z.Bulk Create Listings
Create multiple listings in a single request. Up to 100 listings can be created at once. Each listing is processed independently, so if one fails, the others will still be created.directory_id(integer, required): The ID of the directory
Custom field values can also be passed by using the custom field name as the key (e.g.,
"pricing": "Free", "founded_year": "2020").
When a
url is provided, the API uses it for duplicate detection. If a listing with the same URL already exists in the directory, it will be returned as-is instead of creating a duplicate.Update Listing
Update an existing listing.directory_id(integer, required): The ID of the directoryproject_id(integer, required): The ID of the listing
Pass
ends_at: null to remove an expiry date and make a listing permanent again.Partial updates: When updating a listing, you only need to send the fields you want to change. Fields that are omitted from the request body will remain unchanged. Importantly, if you omit
categories, tags, or organizers from a PUT request, the existing assignments will be preserved. To explicitly clear them, send empty arrays: "categories": [], "tags": [], or "organizers": [].Delete Listing
Delete a listing from the directory.directory_id(integer, required): The ID of the directoryproject_id(integer, required): The ID of the listing
