Retail Lead Management API (1.0)

Download OpenAPI specification:

The RLM v1 API lets an external system read lead data out of a Retail Lead Management pipeline, and create new leads in it.

This is the long-standing public API. It is stable and will not be removed, but it is limited: you can list leads, fetch one lead, and read your organization and pipeline configuration. There is no filtering beyond lead status and a created/updated date, and a list request returns at most 500 leads per page.

If you need richer querying - per-field filters, sorting, pagination, or access to tasks, companies, contacts, journals, attachments and samples - use the v3 read-only API instead. v3 requires access to be enabled on your account; contact RLM support to request it.

Machine-readable spec

This page is generated from an OpenAPI 3.0.3 document, served alongside it:

Format URL
JSON /docs/rlm-v1.json
YAML /docs/rlm-v1.yaml

Point a client generator, a request validator, or a coding assistant at either one rather than at this page - the two files are the same document this page was built from, and the JSON is a straight parse of the YAML.

Two conventions in them are worth knowing, because they are the difference between "these are the only values" and "these are the values we know":

  • enum means the API constrains the value. On a response field, it is the complete set of values the API will ever send.
  • x-recognised-values means the value set is known and fixed but not enforced - RLM understands these values and stores anything else as sent. LeadCreate.state is the one that matters. A validator must not treat it as an enum, because a request outside the list is still accepted.

Values that are configured per pipeline - lead sources, product lines, stage names - cannot appear as either. Read those from GET /api/v1/pipeline/{apiKey} at runtime; each field that works this way says so and names where in that response to look.

Base path

Every endpoint on this page is prefixed /api/v1/, with one exception. Read the path printed on each operation as the complete path: nothing is added to it for you.

Exception Path Why
Create a lead POST /api/{apiKey}/leads Predates the versioned API. Left where it is because moving it would break every integration posting to it.

So a read is https://app.retailleadmanagement.com/api/v1/organization, while creating a lead is https://app.retailleadmanagement.com/api/0123.../leads - no v1.

That one endpoint differs in more than its path: it takes no authentication headers, and its {apiKey} is the pipeline key rather than an organization key. Both differences are covered below and on the operation itself.

Authentication

Requests to the four read endpoints under /api/v1/ must send two headers:

Header Value
X-Api-Key Your organization API key
X-User-Email The email address of an RLM user in that organization

POST /api/{apiKey}/leads - the unprefixed endpoint from the table above - is the exception. It takes no headers at all: the pipeline API key in its URL is the only credential it reads, and a request that omits both headers is accepted and returns 201. Do not hand an organization API key to a form vendor or any other third party writing leads for you - see that endpoint for the reasoning.

These are two different keys and mixing them up is the single most common integration mistake:

  • The organization API key goes in the X-Api-Key header. It authenticates the request. Ask RLM support for it.
  • The pipeline API key goes in the URL path, as the {apiKey} segment. It selects which pipeline you are reading from. An organization can have several pipelines, each with its own key.

X-User-Email determines what you can see. Every lead endpoint is scoped to the pipeline named by {apiKey} and narrowed to what that user may view in the RLM web app, so the same request run as two different users can return different sets.

RLM has six roles. For the lead endpoints they fall into three groups:

Role What the lead endpoints return
System Admin, Business Admin, Business Manager, Full View The pipeline's leads, narrowed to the pipelines, divisions and locations that user may see
Single View Only the leads in that pipeline assigned to them
Assistant Only the leads they created that are still pending and unassigned

Full View is not a manager role. It shares the top row above because it sees the whole pipeline, but that is breadth of visibility, not seniority. RLM's manager roles are System Admin, Business Admin and Business Manager; Full View and Single View are salesperson roles, and their older names in the database still say so - Sales Person Full View and Sales Person Single View.

The distinction has teeth: deleted on List leads is the one thing that needs an actual manager, and a Full View user gets an empty list from it despite seeing every live lead in the pipeline.

Two more consequences worth planning around:

  • A Single View or Assistant user's leads in other pipelines are never included, whichever key you ask with - ask with that pipeline's own key to retrieve those.
  • An Assistant ignores the {status} segment entirely. Pending and unassigned is the whole of what they may see, so closed, all and deleted all return what open returns.

Pick the user whose visibility matches the data set you intend to sync. If a sync returns fewer leads than you expect, check the user's role first, then their pipeline, division and location permissions, before suspecting the request.

The two headers must agree. The user named in X-User-Email must belong to the organization that X-Api-Key authenticates as. Pairing your own organization key with someone else's email returns 422, exactly like an unrecognised key - v1 does not distinguish "wrong credentials" from "not allowed".

Pipeline visibility is a separate matter and is not an authentication check: a user who cannot see the pipeline still authenticates successfully and simply gets an empty result set. If a request suddenly returns no leads rather than an error, check what that user can see in the web app before suspecting your credentials.

Response codes

Successful reads on this API return 201 Created, not 200 OK. This is true for the GET endpoints as well. It is a long-standing quirk of the v1 implementation and changing it now would break existing integrations, so it is documented rather than fixed. Treat any 2xx as success rather than checking for 200.

Almost every failure - unknown organization key, unknown user email, wrong pipeline key, a user who may not see the pipeline - returns 422 Unprocessable Entity with a {"result": "Bad Request"} body. v1 does not distinguish authentication failures from authorization failures, and never returns 401 or 403.

There is one exception: GET /api/v1/pipeline/{apiKey}/lead/{leadId} answers 404 when the lead id does not exist in that pipeline, and a client that handles only 2xx and 422 will fall through on it. Treat it as "no lead was returned".

That 404 body is an HTML page, not JSON - Content-Type: text/html, roughly 15 KB of markup. Calling JSON.parse on it raises. Do not assume a non-2xx response parses as JSON: branch on the status code first, and parse the body only when the response declares application/json. The same is true of any unexpected 500.

Rate limits

Every endpoint on this page - the /api/v1/* reads and POST /api/{apiKey}/leads alike - is limited to 20 requests per second, measured per source IP over a 5 second window. The /api/v1/* reads are measured per set of credentials as well, at the same rate, so spreading a job across several machines does not raise its allowance. It is one shared budget, not 20 per endpoint: a busy lead feed and a polling sync running from the same IP spend the same allowance. Exceeding it returns 429 Too Many Requests with a Retry-After header.

Leads

Read and create leads.

List leads

Returns every lead in the pipeline matching {status} that the user in X-User-Email is allowed to see, most recently updated first.

A response carries at most 500 leads. This is a page, not a truncation: send no paging parameters and you get the first 500, exactly as if you had asked for page 1. A different limit may be configured for your account.

⚠️ If you previously received more than 500 leads from one call, you now receive 500 and must follow the pages to get the rest. Nothing errors, so an integration that ignores the Link header below will quietly process only the first page. This is the one thing to check before this change reaches you.

Read the rest with page[number] and page[size]. Asking for a page[size] above the limit - or below 1 - is refused with 422 and the standard error envelope rather than quietly given a different number, so you always know what you asked for. Nothing else about the size of the result set can produce an error.

Paging is advertised in a Link header (RFC 8288) on every response, including the 422 and including requests that asked for no page, with rel="first", rel="prev" and rel="next" as applicable. The response body is identical whether or not you paged - always a single data array, never a wrapper - so adding paging to an existing integration cannot change what it parses. Walk until no rel="next" is present.

There is no rel="last" and no total count: producing either would cost a full scan of the matching set on every request.

⚠️ Pages are cut from a list ordered by most recently updated first, and that ordering moves as leads are updated - so a lead can shift between pages while you walk them. For an unattended sync, page within a fixed by_datetime_since window rather than paging the whole history, or use the v3 API, whose ordering can be pinned to the immutable id.

For routine syncing, prefer open and narrow with the date parameters below rather than pulling all repeatedly.

Leads with no location or no division are dropped. Restricting this list to the pipelines, divisions and locations the user may see is an inner join on all three, so a lead whose location or division is empty matches nothing and never appears here - even though Lead documents both as nullable, and even though GET /api/v1/pipeline/{apiKey}/lead/{leadId} returns that same lead without complaint. If a lead is visible in the web app but never reaches your integration, check those two fields first.

Incremental syncing

To poll for changes, send by_date=updated together with by_datetime_since set to the timestamp of your last successful sync:

?by_date=updated&by_datetime_since=2026-08-05%2014:30:00

The two date parameters do not use the same clock. by_datetime_since is interpreted in your organization's configured time zone; by_date_at is a UTC calendar day and ignores your time zone entirely. For a Pacific dealer that means every lead taken after 5 p.m. local counts as the following UTC day.

Two more traps worth wiring around before you go live:

  • Send a full timestamp, not a bare date. by_datetime_since=2026-08-05 is read as noon on that day, so it silently skips the morning.
  • A by_datetime_since value that cannot be parsed - or a missing one - is not an error. It becomes a comparison against nothing, and the response is 201 with an empty data array. A wrong timestamp format therefore looks identical to "no new leads", forever. If a sync goes permanently quiet, re-check the value you are sending.
Authorizations:
(OrganizationApiKeyUserEmail)
path Parameters
apiKey
required
string
Example: 0123456789abcdef0123456789abcdef

The pipeline API key, identifying which pipeline to read from or write to. Ask RLM support for it: no endpoint hands out the key of a pipeline you do not already have, and neither GET /api/v1/organization nor GET /api/v1/pipeline/{apiKey} includes it in the configuration it returns.

It is not a secret kept from the read endpoints, though. A lead created through POST /api/{apiKey}/leads records the key it was created with, and every read of that lead returns it verbatim in pipeline_api_key. Anyone who can list leads can therefore collect the pipeline keys those leads came in through, so treat a pipeline key as visible to every user in the organization with API access rather than as a shared secret between you and one vendor.

status
required
string
Enum: "open" "closed" "all" "deleted"
Example: open

Which leads to return.

  • open - leads still moving through the pipeline

  • closed - leads in a closed status (sold, no-sale, dead, ...)

  • all - open and closed

  • deleted - soft-deleted leads. Requires the X-User-Email user to hold one of RLM's three manager roles: System Admin, Business Admin or Business Manager. Anyone below that gets 201 with an empty data array rather than an error, so check the role if this comes back empty unexpectedly.

    A Full View user is below that line, even though every other value of {status} returns them the whole pipeline. Full View is a salesperson role, not a manager one - see Authentication. This is the only place on the v1 API where the two come apart, and it is the usual reason a deleted sync returns nothing.

Any unrecognised value is treated as open.

query Parameters
by_date
string
Enum: "created" "updated"
Example: by_date=updated

Restrict to leads by date. Choose which date to filter on, then supply exactly one of by_date_at or by_datetime_since.

Omit by_date entirely and no date filtering is applied - the other two parameters are ignored on their own.

Sending by_date without either of them is not an error and does not mean "no filter": the response is an empty list.

by_date_at
string <date>
Example: by_date_at=2026-08-05

A single calendar day, as YYYY-MM-DD. Returns leads created or updated on that day. Takes precedence over by_datetime_since.

The day is a UTC day, not a day in your organization's time zone: the comparison is made against the stored UTC timestamp. A Pacific dealer asking for 2026-08-05 gets leads from 5 p.m. on 2026-08-04 through 4:59 p.m. on 2026-08-05 local time, and a lead taken at 11 p.m. on the 5th answers to by_date_at=2026-08-06. Where the boundary matters, use by_datetime_since, which does respect your zone.

by_datetime_since
string
Example: by_datetime_since=2026-08-05 14:30:00

Return leads created or updated at or after this point in time, read in your organization's configured time zone. Used only when by_date_at is absent.

Parsed leniently, so 2026-08-05 14:30:00, 2026-08-05 and relative phrasings such as yesterday or 2 hours ago all work. Always send an explicit YYYY-MM-DD HH:MM:SS timestamp from an automated integration, for two concrete reasons:

  • A value with no time of day means noon, not midnight. 2026-08-05 starts the window at 2026-08-05 12:00:00, and yesterday behaves the same way, so half the day you asked for is missing from the answer.
  • A value the parser cannot make sense of is discarded rather than rejected. The filter then compares against nothing and matches no rows, so a malformed timestamp returns 201 with an empty data array instead of an error. Same for omitting this parameter while still sending by_date.
page[number]
integer >= 1
Example: page[number]=1

Which page to return, counting from 1. Defaults to 1, so omitting it gives you the first page.

A value below 1, or one that is not a number, is treated as absent and you get page 1. A page past the end returns 201 with an empty data array and no rel="next" - that is the normal way a walk ends, alongside a short final page.

page[size]
integer [ 1 .. 500 ]
Example: page[size]=200

How many leads a page may carry. Defaults to the limit that applies to your account - 500 unless yours is set otherwise.

A value above that limit, or below 1, is refused with 422 rather than quietly replaced with a different number, so a page you receive is always the size you asked for. A value that is not a number at all is treated as absent and you get the default.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Get a single lead

Returns one lead by its RLM id, in the same shape as an entry in the list response.

This endpoint does not use the 422 JSON envelope for every failure. It also returns 404 when the lead id does not exist in this pipeline, with an HTML body rather than JSON. Branch on the status before parsing.

Authorizations:
(OrganizationApiKeyUserEmail)
path Parameters
apiKey
required
string
Example: 0123456789abcdef0123456789abcdef

The pipeline API key, identifying which pipeline to read from or write to. Ask RLM support for it: no endpoint hands out the key of a pipeline you do not already have, and neither GET /api/v1/organization nor GET /api/v1/pipeline/{apiKey} includes it in the configuration it returns.

It is not a secret kept from the read endpoints, though. A lead created through POST /api/{apiKey}/leads records the key it was created with, and every read of that lead returns it verbatim in pipeline_api_key. Anyone who can list leads can therefore collect the pipeline keys those leads came in through, so treat a pipeline key as visible to every user in the organization with API access rather than as a shared secret between you and one vendor.

leadId
required
integer
Example: 1234567

The RLM lead id, as returned in the id field of a lead.

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Create a lead

Creates a lead in the pipeline identified by {apiKey}.

Note that this endpoint is not under /api/v1/ - its path is /api/{apiKey}/leads.

It takes no headers

The pipeline API key in the URL is the entire credential. This operation never reads X-Api-Key or X-User-Email; a request that sends neither is accepted and returns 201.

That has one important consequence. When a web-form vendor, chat widget or marketing platform posts leads on your behalf, give them the pipeline key and nothing else. Do not give a third party your organization API key for this endpoint - it is not used here, and it is the credential that reads every lead in your organization through /api/v1/. A pipeline key only writes into the one pipeline it names.

Four reserved keys change the shape of the request

Before anything else, RLM looks at the top level of the body for lead, contact, rawRequest or api, in that order. If one is present, its contents replace the entire payload and every other top-level key is discarded. This is how form vendors post: a JotForm webhook sends rawRequest, and lead and contact wrap a lead the same way.

Key What it must hold Anything else
lead, contact, api An object of the lead's fields A string, number or array answers 500
rawRequest A string of JSON An object, or a string that is not JSON, answers 500

Treat all four names as reserved. {"api": "web"} is not a lead with an api field - it is a malformed envelope, and it answers 500 rather than the 201 an unrecognised key would get. If you need to send a field called lead, contact, api or rawRequest, ask RLM support to configure an api_field_name for it and send that name instead.

If none of the four is present, the body itself is the payload. That is the ordinary case, and everything below describes it.

How keys are matched

Post a single lead object. For each key, RLM looks first for a pipeline field whose api_field_name matches, and failing that for a column on the lead with that name - which in practice is the field's column_name. Keys are lower-cased before either lookup.

api_field_name is an optional alias that somebody has to configure deliberately, and most pipelines have none set on any field, so column_name - as listed in pipeline_fields[] by GET /api/v1/pipeline/{apiKey} - is the normal answer to "what do I call this field?". Use api_field_name when the pipeline configuration shows one.

Neither is the label you see on a lead in RLM. A field shown as Lead Source is source_name on the wire, and the two are edited independently - see PipelineField for how each key maps to the pipeline's field settings. Give RLM support the display name when asking which key a field uses; give your own code the column_name.

A key matching neither is appended to the new lead as a note rather than being rejected, so a misspelled key name fails quietly. The note line uses the humanized key, so a stray first_name reads First name: Jane - not first_name: Jane. A note key is written into the note verbatim, with no prefix.

Some keys reach neither a field nor the note: formid, uniqueid, handshakekey, controller, action, api_key, salesperson_assignment, id, location_id, division_id, location_name, division_name, and any key whose value is blank. Several of those are acted on elsewhere in the request - the location and division keys file the lead - but none of them survive as a note, so do not rely on the note as a full record of what you posted.

The four reserved keys above are not in that list because they never get this far: they are read before the payload is walked, and a malformed one fails the request outright.

What you get back

The new lead is placed in the pipeline's initial status, and filed under the pipeline's default location and division unless the request supplies its own.

It is attributed to the pipeline's default salesperson, who is recorded as its creator - but it is not assigned to anyone. A lead created here comes back with salesperson and salesperson_id null and unassigned true, and stays that way until someone takes it in the web app. Do not read salesperson on a fresh lead to decide who owns it.

An empty or unrecognised payload does not fail. No key is required. Post an empty body and you get 201 and a blank lead sitting in the pipeline; post a body whose keys match nothing and you get 201 and a lead that is only a note. Validate the payload before you send it - nothing on this side will do it for you, and there is no response you can check for "that was not a real lead".

The one exception is a malformed envelope: a top-level lead, contact, api or rawRequest of the wrong type answers 500. That is the only shape of body this endpoint rejects.

path Parameters
apiKey
required
string
Example: 0123456789abcdef0123456789abcdef

The pipeline API key, identifying which pipeline to read from or write to. Ask RLM support for it: no endpoint hands out the key of a pipeline you do not already have, and neither GET /api/v1/organization nor GET /api/v1/pipeline/{apiKey} includes it in the configuration it returns.

It is not a secret kept from the read endpoints, though. A lead created through POST /api/{apiKey}/leads records the key it was created with, and every read of that lead returns it verbatim in pipeline_api_key. Anyone who can list leads can therefore collect the pipeline keys those leads came in through, so treat a pipeline key as visible to every user in the organization with API access rather than as a shared secret between you and one vendor.

Request Body schema: application/json
required
location_name
string

Dealer store location, looked up by name among the pipeline's locations.

An unrecognised name is not an error. The lead is filed under the pipeline's default location instead, or under the alphabetically first location if the pipeline has no default, and the response is still 201. A misspelled store name therefore books the lead at the wrong branch in silence, so read location back from the created lead rather than trusting the name you sent. Omitting the key falls back the same way.

Sending a numeric location_id avoids the guesswork: it is used as-is when it belongs to this pipeline, and ignored - falling back to the behaviour above - when it does not. division_id works the same way for divisions.

Both ids are listed in locations[] and divisions[] on GET /api/v1/pipeline/{apiKey}.

division_name
string

Dealer sales division, looked up by name among the pipeline's divisions.

An unrecognised name is not an error. The lead is filed under the pipeline's default division instead, or under the alphabetically first division if the pipeline has no default, and the response is still 201. A misspelled division name therefore books the lead against the wrong division in silence, so read division back from the created lead rather than trusting the name you sent. Omitting the key falls back the same way.

Sending a numeric division_id avoids the guesswork: it is used as-is when it belongs to this pipeline, and ignored - falling back to the behaviour above - when it does not. location_id works the same way for locations.

Both ids are listed in divisions[] and locations[] on GET /api/v1/pipeline/{apiKey}.

source_name
string

Lead source - labelled Lead Source in RLM. Defaults to Website when omitted.

A select field, so its permitted values are configured per pipeline: read field_options for the source_name entry in pipeline_fields[] on GET /api/v1/pipeline/{apiKey}. New pipelines start from a standard list, but accounts edit it, so the values on the pipeline you are posting to are the only ones that count. Nothing validates what you send - an off-list value is stored as sent and shows up as an unrecognised entry in reporting.

channel_name
string

A channel within the lead source - labelled Lead Channel in RLM.

A select field, so its permitted values are configured per pipeline: read field_options for the channel_name entry in pipeline_fields[] on GET /api/v1/pipeline/{apiKey} and send one of those. Unlike source_name, RLM ships this field with no options at all, so a pipeline that has never had any configured accepts anything and means nothing by it.

Not validated either way - Lead has no inclusion validation, so an off-list value is stored exactly as sent and shows up as an unrecognised entry in reporting.

company_name
string
first_name
string
last_name
string
title
string
email
string
website
string
phone
string
mobile_phone
string
work_phone
string
work_phone_ext
string
address1
string
address2
string
city
string
state
string

State or territory. Send the two-letter code.

Unlike select fields, whose values are configured per pipeline, the values a state field accepts are fixed in RLM and identical everywhere - the 50 states plus DC, five territories, one outlying group, and the three military mailing codes:

AL AK AZ AR CA CO CT DE DC FL GA HI ID IL IN IA KS KY LA ME MD MA MI MN MS MO MT NE NV NH NJ NM NY NC ND OH OK OR PA RI SC SD TN TX UT VT VA WA WV WI WY - AS GU MP PR UM VI - AA AE AP

That is 60 values in total. It is the whole of what RLM's own state pickers offer and the whole of what the name-to-code conversion below will match; Canadian provinces are not among them, so a value like ON is simply stored verbatim.

Sending a full state name usually does not work. A name such as California is converted to CA only when the pipeline's state field has an api_field_name and your key matched that name. When the key matched by column_name - the usual case, since api_field_name is rarely configured - no conversion happens at all and California is stored as California. Sending the code avoids the distinction entirely, because a code needs no conversion.

Nothing rejects an unrecognised value; it is stored as sent. Read the field back from the created lead if it matters.

zip
string
deal_name
string
how_heard
string

How the customer heard about the dealer, and the current standard field for it - every pipeline RLM sets up now gets this one.

A select field: read field_options for the how_heard entry in pipeline_fields[] on GET /api/v1/pipeline/{apiKey} and send one of those values. RLM seeds a starting list, but accounts edit it, so only the pipeline's own list counts. Nothing validates what you send

  • Lead has no inclusion validation - so an off-list value is stored exactly as sent and shows up as an unrecognised entry in reporting.

"How Heard" on screen does not reliably mean this field. See referral_type.

referral_type
string

The older how-heard field, and the reason to map these two by column_name rather than by what the screen says.

RLM no longer configures referral_type on new pipelines. On pipelines that predate how_heard it is still there and still labelled How Heard - and when how_heard was added alongside it, the new field was the one relabelled, to How Heard (Unified Leads). So on an older pipeline the field captioned "How Heard" is referral_type, and on a newer one it is how_heard. Read pipeline_fields[] and match on column_name to see which this pipeline has; do not infer it from the label.

Where the field is configured it is a select, and the usual rule applies: read its field_options from GET /api/v1/pipeline/{apiKey} and send one of those values.

Sending it where it is not configured fails quietly rather than loudly. referral_type is a column on every lead, so the value is stored and you get 201 - but with no field configured for it, nothing shows it in the web app and no read returns it, because reads only cover the pipeline's configured fields.

referral_source
string
products_interested_in
Array of strings

Product lines - labelled Products Interested In in RLM.

A multiple_select field, so send several values as an array and each must come from the same configured list: read field_options for the products_interested_in entry in pipeline_fields[] on GET /api/v1/pipeline/{apiKey}. On a lead read back, the values arrive comma-joined into one string rather than as an array.

The example below is illustrative only - the real list is whatever that pipeline has configured. As with referral_type and promo_type, nothing validates it and off-list values are stored as sent.

opt_in
boolean

Email marketing permission.

promo_type
string

Which promotion the lead came in under - labelled Promo Type in RLM.

A select field: read field_options for the promo_type entry in pipeline_fields[] on GET /api/v1/pipeline/{apiKey}. RLM ships this field with no options, so anything it offers is entirely the account's own list.

Nothing validates this against the pipeline's configured options - Lead has no inclusion validation - so an off-list value is stored exactly as sent and shows up as an unrecognised entry in reporting. Read the field's field_options from GET /api/v1/pipeline/{apiKey} and send one of those values.

note
string

Initial comments or request detail.

property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "location_name": "string",
  • "division_name": "string",
  • "source_name": "Website",
  • "channel_name": "string",
  • "company_name": "string",
  • "first_name": "string",
  • "last_name": "string",
  • "title": "string",
  • "email": "string",
  • "website": "string",
  • "phone": "string",
  • "mobile_phone": "string",
  • "work_phone": "string",
  • "work_phone_ext": "string",
  • "address1": "string",
  • "address2": "string",
  • "city": "string",
  • "state": "string",
  • "zip": "string",
  • "deal_name": "string",
  • "how_heard": "string",
  • "referral_type": "string",
  • "referral_source": "string",
  • "products_interested_in": [
    ],
  • "opt_in": true,
  • "promo_type": "string",
  • "note": "string"
}

Response samples

Content type
application/json
{
  • "result": "Success",
  • "lead_id": 1234567,
  • "lead_uuid": "4f0a1b2c-3d4e-5f60-7182-93a4b5c6d7e8",
  • "messages": null
}

Configuration

Read how your organization and pipelines are set up - which pipelines, locations and divisions exist, and which field names appear on lead objects. Pipeline API keys are not discoverable here; ask RLM support.

Get organization info

Returns the organization identified by the X-Api-Key header, including its locations, divisions and pipelines.

Call this first: the pipelines[].id and pipelines[].name values tell you which pipelines exist and which one you mean.

This response does not contain pipeline API keys. Ask RLM support for the key of the pipeline you want to read; it is the {apiKey} path segment on every other endpoint.

Authorizations:
(OrganizationApiKeyUserEmail)

Responses

Response samples

Content type
application/json
{
  • "result": "Success",
  • "id": 0,
  • "name": "string",
  • "daily_agenda_delivery": "2019-08-24T14:15:22Z",
  • "daily_stalled_delivery": "2019-08-24T14:15:22Z",
  • "locations": [
    ],
  • "divisions": [
    ],
  • "pipelines": [
    ]
}

Get pipeline configuration

Returns the configuration of a single pipeline: its fields, its lead statuses, and the locations and divisions available to it.

This is how you discover field names. A lead object carries the custom fields configured for its pipeline, so the pipeline_fields[] entries here tell you which keys to expect on a lead and what type each holds.

Authorizations:
(OrganizationApiKeyUserEmail)
path Parameters
apiKey
required
string
Example: 0123456789abcdef0123456789abcdef

The pipeline API key, identifying which pipeline to read from or write to. Ask RLM support for it: no endpoint hands out the key of a pipeline you do not already have, and neither GET /api/v1/organization nor GET /api/v1/pipeline/{apiKey} includes it in the configuration it returns.

It is not a secret kept from the read endpoints, though. A lead created through POST /api/{apiKey}/leads records the key it was created with, and every read of that lead returns it verbatim in pipeline_api_key. Anyone who can list leads can therefore collect the pipeline keys those leads came in through, so treat a pipeline key as visible to every user in the organization with API access rather than as a shared secret between you and one vendor.

Responses

Response samples

Content type
application/json
{
  • "result": "Success",
  • "name": "string",
  • "api_key": "string",
  • "has_samples": true,
  • "sample_fields": [
    ],
  • "default_division_id": 0,
  • "default_location_id": 0,
  • "default_salesperson_id": 0,
  • "pipeline_fields": [
    ],
  • "pipeline_statuses": [
    ],
  • "locations": [
    ],
  • "divisions": [
    ]
}