Navigation

Fetch Developer Identifiers

Your first API call after onboarding — retrieve the credentials you need for every subsequent request

POST /apis/v2/public/developers/fetchIdentifiers

Returns the api_key, organization details, team members, and brands associated with your developer key. Only requires your developer_secret — no api_key, org_id, or member_id needed.

Requires a valid `developer_secret` in the JSON request body. Requests must originate from a whitelisted IP address. No `api_key` required — this endpoint returns it.

Tip: This should be the first API call you make after completing developer onboarding. The response gives you every identifier you need to call other Zyntro APIs — your `api_key`, the `org_id`, each team member's `member_id`, and all `brand_id` values. Store these values in your application config so you do not need to call this endpoint repeatedly.

Parameters

Name In Type Required Description
developer_secret body string Yes Your developer secret (zdk_XXX). Issued once during onboarding — if lost, your client must revoke the key and re-onboard you.
Info: This is the only public API endpoint that does not require `api_key`. Your developer secret alone is enough — the API resolves your client's account from the key and returns the `api_key` along with all other identifiers you need.

Request Body

Content-Type: application/json

Schema

json
{
    "developer_secret": "string (required)"
}

Example

json
{
    "developer_secret": "YOUR_DEVELOPER_SECRET"
}

Code Samples

bash
curl -X POST https://app.zyntrohq.com/apis/v2/public/developers/fetchIdentifiers \
  -H "Content-Type: application/json" \
  -d '{
    "developer_secret": "YOUR_DEVELOPER_SECRET"
  }'
php
$response = file_get_contents(
    'https://app.zyntrohq.com/apis/v2/public/developers/fetchIdentifiers',
    false,
    stream_context_create([
        'http' => [
            'method' => 'POST',
            'header' => 'Content-Type: application/json',
            'content' => json_encode([
                'developer_secret' => 'YOUR_DEVELOPER_SECRET',
            ]),
        ],
    ])
);

$data = json_decode($response, true);

// Store these for all subsequent API calls
$apiKey = $data['data']['api_key'];
$orgId  = $data['data']['organization']['org_id'];
$brands = $data['data']['brands'];
javascript
const response = await fetch(
  'https://app.zyntrohq.com/apis/v2/public/developers/fetchIdentifiers',
  {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      developer_secret: 'YOUR_DEVELOPER_SECRET',
    }),
  }
);

const { data } = await response.json();

// Store these for all subsequent API calls
const apiKey  = data.api_key;
const orgId   = data.organization.org_id;
const members = data.members;
const brands  = data.brands;

Response

200 Identifiers retrieved successfully. The response includes all values needed for subsequent API calls.
json
{
    "data": {
        "brands": [
            {
                "brand_id": 1,
                "brand_name": "Acme Corp"
            },
            {
                "brand_id": 2,
                "brand_name": "Acme Pro"
            }
        ],
        "api_key": "UYUJH-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXX",
        "members": [
            {
                "name": "Jane Smith",
                "role": "admin",
                "email": "[email protected]",
                "is_admin": 1,
                "job_title": "CEO",
                "member_id": "f2470c7f-60b1-4491-b117-8ba0e3e2a53b"
            },
            {
                "name": "Alex Johnson",
                "role": "member",
                "email": "[email protected]",
                "is_admin": 0,
                "job_title": "Marketing Manager",
                "member_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
            }
        ],
        "organization": {
            "org_id": "42cc1aca-3aa5-4339-98d2-480b5b89937b",
            "org_name": "Acme Corp"
        }
    },
    "status": "success"
}
403 Authentication failed — invalid credentials or non-whitelisted IP.
json
{
    "data": "Invalid developer_secret",
    "status": "error"
}

Errors

Code Message Resolution
MISSING_DEVELOPER_SECRET Missing developer_secret
The `developer_secret` field is missing or empty.
Include the developer secret (zdk_XXX) you received during onboarding.
INVALID_DEVELOPER_SECRET Invalid developer_secret
The developer secret does not match any active developer key.
Verify your secret. If lost, your client must revoke the key and create a new one through the developer onboarding process.
IP_NOT_WHITELISTED IP address not whitelisted
The request came from an IP address that is not in your developer key's allowed list.
Contact your client to add your current IP address to the key's whitelist. You specified allowed IPs during onboarding — if your IP has changed, the whitelist needs updating.

Rate Limits

Rate limits are based on your client's subscription plan and apply across all v2 public endpoints.
  • Plan 1 (Starter): 3 requests/minute, 35/hour, 300/day
  • Plan 2 (Growth): 5 requests/minute, 50/hour, 500/day
  • Plan 3 (Pro): 10 requests/minute, 500/hour, 2,000/day
  • Plan 4 (Enterprise): 20 requests/minute, 1,000/hour, 5,000/day
Important: Call this endpoint once and cache the results. The identifiers it returns — api_key, org_id, member_ids, brand_ids — do not change unless the client modifies their account structure. There is no need to call this before every API request.
Tip: **Typical integration flow:**

1. Complete developer onboarding and receive your `developer_secret`
2. Call `fetchIdentifiers` with just your `developer_secret` to get `api_key`, `org_id`, `member_id`, and `brand_id` values
3. Store these in your application's environment config
4. Use `api_key` + `developer_secret` together in all subsequent API calls (fetchContact, updateFieldData, lookupContact, etc.)
5. If an API returns an authentication error, call `fetchIdentifiers` again to check if any values have changed

Was this article helpful?

NotebookLM Overviews