Information
- OpenAPI version:
3.0.0
The Optizmo Network Engagement (O.N.E) API lets an affiliate tracking platform keep a SUPPRESS account in step
with the advertisers, offers and affiliates it manages. Your platform creates and updates advertisers, Opt-Out
Lists, campaigns and affiliates in the account, and receives for each affiliate on each campaign the two things
the affiliate needs: a Mailer Access Key to download the suppression list, and an Opt-Out link to place
in creatives. On a standard list the key is a MAK (m-...); on a linked list, which downloads another
account’s list, it is an SMAK (sm-...).
Every call is an HTTP GET to
https://one.optizmo.net/api.cgi
with the operation selected by the action query parameter and all other values passed as query parameters.
Values must be URL-encoded.
When your platform is registered with Optizmo you receive two values:
ref;Each SUPPRESS account that connects to your platform gives you its ONID, found on the account’s
Account Settings page under Affiliate Tracking System. It is sent as onid and identifies the account a
request is for.
Every request carries a check_hash: the MD5 hex digest of the request’s hashed values concatenated in order,
with no separator, followed by the PAK. Each action lists its hashed values in order. Only values you actually
send are included, so omit a parameter rather than sending it empty. The values are hashed as sent, before URL
encoding; UTF-8 values are accepted either as bytes or as decoded characters.
For example, a full client_sync request with PAK a1b2c3d4e5f6a7b8. The
two versions differ only in the Opt-Out List values (see Versions):
| Parameter | Version 1 | Version 2 |
|---|---|---|
action |
client_sync |
client_sync |
ref |
pqmpg |
pqmpg |
onid |
662b824d577c74b57bf1c4fc647b79c7 |
662b824d577c74b57bf1c4fc647b79c7 |
advertiser_id |
C12412 |
C12412 |
advertiser_name |
BlockBuster |
BlockBuster |
optout_id |
O39232 |
f3k93kda3 |
optout_name |
Master List |
not sent |
campaign_id |
K3K3 |
K3K3 |
campaign_name |
Spring Offer |
Spring Offer |
mailer_id |
311111 |
311111 |
mailer_name |
Acme Mailing |
Acme Mailing |
mailer_email |
ops@acmemailing.example |
ops@acmemailing.example |
Version 1:
check_hash = md5("client_syncpqmpg662b824d577c74b57bf1c4fc647b79c7C12412BlockBusterO39232Master ListK3K3Spring Offer311111Acme Mailingops@acmemailing.example" + "a1b2c3d4e5f6a7b8")
= 7583f2e660997b8d1c224a8d74260c51
Version 2:
check_hash = md5("client_syncpqmpg662b824d577c74b57bf1c4fc647b79c7C12412BlockBusterf3k93kda3K3K3Spring Offer311111Acme Mailingops@acmemailing.example" + "a1b2c3d4e5f6a7b8")
= 84f163e7281cbb63026a5750ef1a7ce8
A request whose hash does not match answers failed,Check Hash Failed.
A platform is registered as version 1 or version 2. The only difference is how an Opt-Out List is identified:
optout_id is your platform’s own id for the list. The list is created in SUPPRESS the first
time the id is seen, named by optout_name, and renamed when the name changes.optoutlist_id as optout_id.
optout_name is not sent and lists are never renamed through the API.return_format selects the body format; it defaults to csv and is not hashed.
return_format |
Content type | Success | Failure |
|---|---|---|---|
csv |
text/plain |
success,<mailer_url>,<optout_url>, success,<mailer_url>, when no Opt-Out link was issued, success alone when no keys were issued, or, only for a client_sub_sync healed onto a replacement key, a fourth field carrying it (success,,,<access_link> when that call issued no keys of its own) |
failed,<message> |
xml |
text/xml |
<output><result>success</result><data><mailer_url>…</mailer_url><optout_url>…</optout_url></data></output>, with an empty element for whichever of mailer_url/optout_url is absent |
<output><result>failed</result><error>…</error></output> |
json |
application/json |
{"output":{"result":"success","data":{"mailer_url":"…","optout_url":"…"}}}, with a null value for whichever of mailer_url/optout_url is absent |
{"output":{"result":"failed","error":"…"}} |
Failures are returned with HTTP 200; read the body. The exceptions are HTTP 503 while the system is in
maintenance (failed,System currently under maintenance, in the format return_format selects); the report and
list actions, which return XML documents of their own; the page actions
(Manage Opt-Out Lists and the profile actions), which normally answer
with an HTTP redirect to the page (Manage Opt-Out Lists answers with a sign-in page instead, for a browser
that blocks third-party cookies); and client_config and add_emails, which answer with an HTML page.
test_only is described alongside its parameter definition: it is honoured only by the synchronisation
actions, the report, Get Opt-Out Lists, and client_config/add_emails;
every other action ignores it and makes its real change regardless.
Responses to the synchronisation actions are stored for 60 minutes, keyed on the action, onid,
advertiser_id, optout_id, campaign_id, check_hash and return_format. A request identical to one made
within the last hour is answered with the stored response and the header X-Status: cached, without being
processed again. Because any change to a hashed value changes the check_hash, a changed request is always
processed. Concurrent identical requests wait for the first to finish rather than being processed twice; a
request still waiting after 10 minutes answers failed,Request timed out. Please retry. A
client_sub_sync call healed onto a replacement key is always processed rather than answered from the
cache, and its own response is never stored, so a caller that keeps presenting a replaced key is resolved
again on every request.
When a list or campaign is moved, the stored responses of the account that moved it are cleared, and so are those of every network below it whose own linked list the move re-sourced or simply handed a new Opt-Out link, so each of them gets current keys on its next request.
Ids (advertiser_id, campaign_id, mailer_id, submailer_id, optout_id) may be up to 40 characters; longer ids are
rejected with failed,The following input values were too long = <names>. Names and contact
details longer than their limit are truncated: campaign_name 150, advertiser_name and mailer_name 80,
mailer_email 500, mailer_phone 80, advertiser_email 80, advertiser_contact 70, advertiser_phone 20.