Docs / Developers / Directory Listing Management API

Directory Listing Management API

Programmatically create, update, and delete EmbedDirectory listings with the REST API.

Do I Need the API?

For most customers, the API is not required. You can manage listings without code:

  • Dashboard: Add, edit, and organize listings in your dashboard.
  • CSV import: Upload many listings from a spreadsheet.
  • Google Sheets sync: Keep listings in sync automatically.
  • Form integrations: Connect tools like JotForm, Typeform, and Tally.
  • Zapier: Automate updates across thousands of apps.

The REST API is best when you need custom integrations from your own systems (CRM, backend jobs, internal tools, or proprietary databases).

Overview

The EmbedDirectory REST API gives you CRUD access to your listings and field definitions.

Base URL

https://api.embeddirectory.com/v1/manage

The API is available on the Business plan. All requests require a private API key.

Authentication

Send your API key on every request:

Authorization: Bearer edsk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Alternative header:

X-API-Key: edsk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Get Your API Key

  1. Go to Dashboard → Developers
  2. Click Create API Key
  3. Copy it immediately (shown once at creation)
Keep API keys private. Do not expose keys in public repositories or client-side scripts. If a key is exposed, rotate it immediately.

Rate Limits

The API allows 120 requests per minute per API key.

HeaderDescription
X-RateLimit-LimitMaximum requests per minute
X-RateLimit-RemainingRequests remaining in the current window

Response Format

Successful responses:

{
  "success": true,
  "data": { }
}

Paginated responses:

{
  "success": true,
  "data": [],
  "meta": {
    "page": 1,
    "per_page": 50,
    "total": 127,
    "total_pages": 3
  }
}

Error Handling

Error responses:

{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "The name field is required.",
    "details": {
      "name": ["The name field is required."]
    }
  }
}
Status CodeMeaning
200Success
201Created successfully
204Deleted successfully (no content)
401Invalid or missing API key
403Access denied (plan or permission)
404Resource not found
422Validation error
429Rate limit exceeded

List Listings

GET /v1/manage/listings

Returns a paginated list of listings.

Query Parameters

ParameterTypeDescription
pageintegerPage number (default: 1)
per_pageintegerResults per page, max 100 (default: 50)
statusstringpublished or draft
searchstringSearch by listing name

Example Request

curl -H "Authorization: Bearer edsk_xxxx" \
  "https://api.embeddirectory.com/v1/manage/listings?status=published&per_page=10"

Get a Listing

GET /v1/manage/listings/{id}

Returns one listing by ID.

Example Request

curl -H "Authorization: Bearer edsk_xxxx" \
  "https://api.embeddirectory.com/v1/manage/listings/42"

Create a Listing

POST /v1/manage/listings

Creates a new listing.

Request Body

FieldTypeRequiredDescription
namestringYesListing name (max 255 chars)
descriptionstringNoListing description
addressstringNoStreet address (max 500 chars)
locationobjectNo{ "latitude": 0, "longitude": 0 }
field_valuesobjectNoCustom values keyed by field ID
statusstringNopublished (default) or draft

Example Request

curl -X POST "https://api.embeddirectory.com/v1/manage/listings" \
  -H "Authorization: Bearer edsk_xxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme Corp",
    "description": "Leading provider of widgets",
    "address": "123 Main St, Springfield, IL",
    "location": {
      "latitude": 39.7817,
      "longitude": -89.6501
    },
    "field_values": {
      "category_field_1": "Technology"
    },
    "status": "published"
  }'

Update a Listing

PUT /v1/manage/listings/{id}

Updates an existing listing. Supports partial updates.

Example Request

curl -X PUT "https://api.embeddirectory.com/v1/manage/listings/42" \
  -H "Authorization: Bearer edsk_xxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme Corporation",
    "status": "draft"
  }'

Delete a Listing

DELETE /v1/manage/listings/{id}

Soft-deletes a listing. Returns 204 No Content.

Example Request

curl -X DELETE "https://api.embeddirectory.com/v1/manage/listings/42" \
  -H "Authorization: Bearer edsk_xxxx"

Get Field Definitions

GET /v1/manage/fields

Returns configured custom field definitions.

Example Request

curl -H "Authorization: Bearer edsk_xxxx" \
  "https://api.embeddirectory.com/v1/manage/fields"

Field Types

TypeValue FormatDescription
textstringSingle text value
numbernumberNumeric value
categorystringSingle selection from options
tagsarray[string]Multiple text values
multiarray[string]Multiple predefined selections
checkboxbooleanTrue/false value
imagesarray[url]Image URLs

Still have questions?

We're happy to help anytime.

Get in Touch

Build your directory today

Set up in minutes. No coding needed. Works on any website.