Oracle Eloqua AppCloud Developer Framework
Oracle Eloqua AppCloud Developer Framework
Oracle Eloqua AppCloud Developer Framework
com
31/03/2015
Contents
1 Oracle Eloqua AppCloud Developer's Guide
1.1 Features
1.2 Flow
1.3.1 Requirements
1.3.3 NextSteps
1.4 Service Descriptions
10
10
10
11
11
11
11
11
12
1.5.1 Example
12
1.5.2 Recommendations
12
2 Develop an App
2.1 Instantiation-Execution Model
13
13
13
2.1.2 Execution
15
16
18
18
19
22
24
24
25
28
2 of 85
30
31
32
33
36
39
39
42
43
45
45
3.1.1 Details
45
3.1.2 Lifecycle
46
3.1.3 OAuth
46
47
48
49
50
50
51
52
52
53
54
54
55
55
55
57
58
58
59
3 of 85
60
60
61
62
62
62
63
64
64
64
65
65
65
65
4.4.1 No AdditionalInformationNeeded
66
66
67
67
68
68
69
69
70
4.8.1 Shutdown
71
71
71
71
72
74
74
74
5.1.2 What permissions do Ineed to start developing apps for the OracleEloqua AppCloud? 74
4 of 85
5.1.3 When and how doesmy app get listed on the OracleEloqua AppCloud site?
74
74
74
75
75
75
5.2.3 Can Iinclude Campaign, Email, Landing Page, Form (etc) fields in my record
definition?
75
75
75
5.3.1 What happens if contacts are errored in an Action or Decision step?What happens if
the service is unavailable when contacts flow into a step on the canvas?
75
5.3.2 Does Eloqua notify me when someone uninstalls or deletes my app from their Eloqua
instance?
76
5.3.3 How do I delete an app that I have developed?
76
76
76
5.4 Limits
76
76
77
6 Reference
6.1 URL Parameters
78
78
6.1.1 GeneralParameters
78
79
80
80
80
80
6.2.3 Example
81
81
81
81
5 of 85
6.3.3 Example
6.4 PUT /decisions/instances/{id}
82
82
82
82
6.4.3 Example
82
83
83
83
6.5.3 Example
83
84
84
84
6.6.3 Example
84
6 of 85
1.1 Features
App Keys and OAuth2
Testing: test your apps inside your development instance before going live
Selective whitelististing, so you can run betas on your Apps before release
Improved processing speeds with the Bulk API
A seamless flow for App installation and configuration
6 OracleEloqua AppCloud service types to support your different goals. Read about the service
types for more information.
1.2 Flow
Getting started with the OracleEloqua AppCloud Developer Framwork follow a three step flow: first,
you need to register as a provider in your Eloqua development instance. This gives you provider
credentials that you can use to develop apps that interact with Eloqua. Then, you need to develop an
app, and register it with Eloqua. When you register an app, you provide Eloqua with a series of
templated URLs that Eloqua uses to call out to your app. The register services guides provide
guidance on what URL parameters you should include in each templated URL so that you will receive
the data you need to do whatever your app does. Finally, you can publish the app, either to specific
Eloqua instances, or as a general release. Once you whitelist a site, you can share your app's install
URL so that the site's administrator can install the app and let marketers start using it.
7 of 85
1.3.1 Requirements
A development Eloqua instance in which you have registered as a provider
Sufficient user permissions:the user making calls against Eloqua's APIs must have APIUsers
and AdvancedUsers - Marketing permissions granted in the Security Groups section of
theuser management area of Eloqua.
8 of 85
Then, click Create a Provider, which brings you to the AppCloud Developer Create New Provider
page.
9 of 85
The Prover Details page includes the unique GUID-based provider External Id.
1.3.3 NextSteps
Once you've registered as a provider, read the See "Service Descriptions" on page 10 to determine
which ones you want to implement in your app, read about URLtemplating, and then consider the See
"Develop an App" on page 13.
10 of 85
11 of 85
call out to the third-party with the update. Read more about the Firehose service in the development
guide and service registration instructions
{EventType}, which provides campaign status information (Created, Activated, Draft, and so on).
These URL parameters enable you to configure the service URLs that Eloqua calls out to, specifying
the information that you need for your application.
1.5.1 Example
Consider this templatedURL:
https://awesomeapp.example.com/create/instance={InstanceId}
&asset={AssetId}&site={SiteName}
WhenEloqua calls theURL, the templated parameters are replaced with the appropriate values:
https://awesomeapp.example.com/create/instance=b5fc25ce-970942c4-a57d-caa00e23f658&asset=45&site=DocsExampleSite
1.5.2 Recommendations
Choose the URLparameters to include in your templatedURLs based on your use case. These
parameters provide contextual information:your application design will determine which parameters
you need. The full list of parameters is available. The url parameters reference provides a description
for each parameter. You should familiarize yourself with the supportedURLparameters when
designing your templatedURLs.
The service registration guides also include suggestions for parameters to include for specific URLs.
These recommendations are the minimum you will likely need. Include additional parameters if you
require them.
12 of 85
2 Develop an App
The OracleEloqua AppCloud Development Framework provides 6 service types that you can develop
to extend Eloqua's functionality. Some services create steps that a marketer can add to the campaign
canvas, or to an email or landing page, another service type enables marketers to launch third-party
applications directly from within Eloqua's UI, while another yet creates a web hook that calls out to a
third-party service when a marketer performs an action within Eloqua.
These services make it easy for developers to extend Eloqua's capabilities, providing new
opportunities for marketers to harness both Eloqua data and external services to better serve their
goals.
Before you start developing OracleEloqua AppCloud services, familiarize yourself with the
instantiation-execution model, which Actions,Decisions, Feeders, and Content follow. Then, you can
read the development guides:
Develop an Action Service
Develop a Decision Service
Develop a Feeder Service
Develop a Content Service
Develop a Firehose Service
Develop a Menu Service
13 of 85
For example, AwesomeApp has an AppCloud Decision service whose Create URL is:
https://example.com/awesomeapp/decide/create?instance=
{instanceId}
Eloqua calls out to this URL with an empty JSON object, replacing the templated parameters
with the service instance ID and app installation ID.
Your application should respond with default details in a Record Definition Data Transfer Object
(DTO). For example, for a Decision service, the response might resemble:
{
"recordDefinition":
{
"ContactID" : "{{Contact.Id}}",
"EmailAddress" : "{{Contact.Field(C_EmailAddress)}}
"
}
}
This tells Eloqua to send the contacts Contact ID and email address when the service is
executed. For detailed instructions, see the documentation specific to each service type.
3. The Marketer can then configure the instance using your services UI by clicking on the Edit
button on the service instance. Eloqua opens a browser window to the Configure URL for the
service. Note: this call to the Configure URL comes directly from the marketing users browser,
rather than from the Eloqua API. If you need to restrict access, you can do so here by requiring
the user be on a specific VPN, for example.
4. If the Marketer has made changes, your API should call back to Eloqua using a PUT request
with an updated DTO specifying the new record definition. For example, if the Marketer created
an AppCloud Decision step that required field1, field2, and field3, the PUT request
would resemble:
PUT
https://secure.eloqua.com/api/cloud/1.0/decisions/instance/f
ddc932a-f27d-40c3-a126-82299b9512c5
{
"recordDefinition":
{
"ContactID" : "{{Contact.Id}}",
"EmailAddress" : "{{Contact.Field(C_EmailAddress)}}",
"field1" : "{{Contact.Field(C_field1)}}",
14 of 85
"field2" : "{{Contact.Field(C_field2)}}",
"field3" : "{{Contact.Field(C_field3)}}"
}
}
2.1.2 Execution
1. When the service is activated, either by contacts flowing through a campaign or a visit to a
landing page, this batch of contacts is tagged with an execution ID that tracks its progress.
2. This step varies depending on the service type, but in general, the Eloqua internal API calls out
to the Services notification URL, and transmits a the information you specified during the
configuration phase. In the above example, then, the recordDefinition includes the
contacts ID, email address, field1, field2 and field3. The call to the notification URL would then
resemble:
POST
https://example.com/awesomeapp/decide/notify?instance=fddc93
2a-f27d-40c3-a126-82299b9512c5&asset=456
{
"offset" : 0,
"limit" : 1000,
"totalResults" : 2,
"count" : 2,
"hasMore" : false,
"items" :
[
{
"ContactID" : "1",
"EmailAddress" : "[email protected]",
"field1" : "stuff",
"field2" : "things",
"field3" : "et cetera"
},
{
"ContactID" : "2",
"EmailAddress" : "[email protected]",
15 of 85
16 of 85
17 of 85
POST
https://example.com/awesomeapp/act/create?instance=f82d50cd86a9-4fca-b37e-4ec9a98b0339
{}
AwesomeApps response is a DTO describing the fields Eloqua should transmit when the service in
executed. You can include a maximum of 100 fields in your record definition. See: Bulk API Limits for
more information.
{
"recordDefinition" :
{
"ContactID" : "{{Contact.Id}}",
"EmailAddress" : "{{Contact.Field(C_EmailAddress)}}"
}
}
18 of 85
POST
https://example.com/awesomeapp/act/notify?instance=f82d50cd86a9-4fca-b37e-4ec9a98b0339&asset=456
{
"offset" : 0,
"limit" : 1000,
"totalResults" : 2,
"count" : 2,
"hasMore" : false,
"items" :
[
{
"ContactID" : "1",
"EmailAddress" : "[email protected]",
"field1" : "stuff",
"field2" : "things",
"field3" : "et cetera"
},
{
"ContactID" : "2",
"EmailAddress" : "[email protected]",
"field1" : "more stuff",
"field2" : "other things",
"field3" : "and so on"
}
]
}
New in version Fall-2014:If AwesomeApp configured its Action service to automatically set the
contacts' status to "complete" when Eloqua calls out to the notification URL, it simply accepts the
notification URL and performs it action. No calls in to Eloqua's Bulk API are needed. Eloqua will ignore
the response to the notification URL call, provided it is not a 400- or 500-level error.
Otherwise AwesomeApp responds with a 204 response, indicating that the response will be
asynchronous, followed by an import to Eloquas Bulk API, where AwesomeApp specifies a sync
action. For Actions, the sync action is either complete or errored. Note that the maximum import
size per batch is 50,000: if you have more than 50,000 contacts, break your data up into multiple
imports.
19 of 85
b37e-4ec9a98b0339:
When referencing service instances, you must transmit theGUID without dashes. The
Bulk APIwill error if you transmit the GUID with the dashes.
POST https://secure.eloqua.com/api/bulk/2.0/contacts/imports
?
{
"name" : "AwesomeApp Action Response Bulk Import",
"updateRule" : "always",
"fields" : {
"emailAddress" : "{{Contact.Field(C_EmailAddress)}}"
},
"syncActions" : [
{
"destination" : "{{ActionInstance
(f82d50cd86a94fcab37e4ec9a98b0339)}}",
"action" : "setStatus",
"status" : "complete"
}
],
"identifierFieldName" : "emailAddress"
}
Eloquas response will be a 201 Created response that includes a uri parameter, which you
can use to identify the import:
20 of 85
"syncActions" : [
{
"destination" : "{{ActionInstance
(f82d50cd86a94fcab37e4ec9a98b0339)}}",
"action" : "setStatus",
"status" : "complete"
}
],
"isSyncTriggeredOnImport" : false,
"isUpdatingMultipleMatchedRecords" : false,
"uri" : "/contacts/imports/6",
"createdBy" : "DocsExample",
"createdAt" : "2014-03-06T13:59:00.6600046Z",
"updatedBy" : "DocsExample",
"updatedAt" : "2014-03-06T13:59:00.6600046Z"
}
2.
POST
https://secure.eloqua.com/api/bulk/2.0/contacts/imports
/6/data
[
{
"emailAddress" : "[email protected]"
},
{
"emailAddress" : "[email protected]"
}
]
3. Synchronize the data for import:
AwesomeApps request:
POST https://secure.eloqua.com/api/bulk/2.0/syncs
{
"syncedInstanceURI":"/contacts/imports/6",
}
Eloquas Response:
201 Created
21 of 85
{
"syncedInstanceURI" : "/contacts/imports/6",
"status" : "pending",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/6"
}
4. You can then use the syncs uri (/syncs/6) to check the status of the sync:
GET https://secure.eloqua.com/api/bulk/2.0/sync/6
For a full description of the sync status codes, see: Bulk API Sync Status Codes
When the sync is complete, Eloquas response will resemble:
200 OK
{
"syncedInstanceURI" : "/contacts/imports/6",
"syncStartedAt" : "2014-01-01T13:59:07.1375620Z",
"syncEndedAt" : "2014-01-01T13:59:14.1375620Z",
"status" : "success",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/6"
}
If you run into trouble or have questions about theBulk API, check out theBulk APIdocumentation.
22 of 85
23 of 85
POST
https://example.com/awesomeapp/decide/create?instance=9347bfe19c72-409c-a5cd-402ff74f0caa
{}
AwesomeApps response is a DTO describing the fields Eloqua should transmit when the service in
executed. You can include a maximum of 100 fields in your record definition. See: Bulk API Limits for
more information.
{
"recordDefinition" :
{
"ContactID" : "{{Contact.Id}}",
"EmailAddress" : "{{Contact.Field(C_EmailAddress)}}"
}
}
24 of 85
POST
https://example.com/awesomeapp/decide/notify?instance=9347bfe19c72-409c-a5cd-402ff74f0caa&asset=456
{
"offset" : 0,
"limit" : 1000,
"totalResults" : 2,
"count" : 2,
"hasMore" : false,
"items" :
[
{
"ContactID" : "1",
"EmailAddress" : "[email protected]",
"field1" : "stuff",
"field2" : "things",
"field3" : "et cetera"
},
{
"ContactID" : "2",
"EmailAddress" : "[email protected]",
"field1" : "more stuff",
"field2" : "other things",
"field3" : "and so on"
}
]
}
AwesomeApp responds with a 204 response, indicating that the response will be asynchronous,
followed by an import to Eloqua's Bulk API, where AwesomeApp specifies a sync action. For
Decisions, the sync action is either "yes", "no", or "errored". AwesomeApp will need to create
multiple imports for the different statuses, with contacts that should follow the "no" path in one import
and contacts that should follow the "yes" path in another. Note that the maximum import size per batch
is 50,000: if you have more than 50,000 contacts, break your data up into multiple imports.
9c72-409c-a5cd-402ff74f0caa:
25 of 85
When referencing service instances, you must transmit theGUID without dashes. The
Bulk APIwill error if you transmit the GUID with the dashes.
POST https://secure.eloqua.com/api/bulk/2.0/contacts/imports
?
{
"name" : "AwesomeApp Decision Response Bulk Import",
"updateRule" : "always",
"fields" : {
"emailAddress" : "{{Contact.Field(C_EmailAddress)}}"
}
"syncActions" : [
{
"destination" : "{{DecisionInstance
(9347bfe19c72409ca5cd402ff74f0caa)}}",
"action" : "setStatus",
"status" : "yes"
}
],
"identifierFieldName" : "emailAddress"
}
Eloquas response will be a 201 Created response that includes a uri parameter, which you
can use to identify the import:
{
"name" : "AwesomeApp Decision Response Bulk Import",
"updateRule" : "always",
"fields" : {
"emailAddress" : "{{Contact.Field(C_EmailAddress)}}"
},
"identifierFieldName" : "emailAddress",
"syncActions" : [
{
"destination" : "{{DecisionInstance
26 of 85
(9347bfe19c72409ca5cd402ff74f0caa)}}",
"action" : "setStatus",
"status" : "yes"
}
],
"isSyncTriggeredOnImport" : false,
"isUpdatingMultipleMatchedRecords" : false,
"uri" : "/contacts/imports/6",
"createdBy" : "DocsExample",
"createdAt" : "2014-03-06T13:59:00.6600046Z",
"updatedBy" : "DocsExample",
"updatedAt" : "2014-03-06T13:59:00.6600046Z"
}
2.
POST
https://secure.eloqua.com/api/bulk/2.0/contacts/imports
/6/data
[
{
"emailAddress" : "[email protected]"
},
{
"emailAddress" : "[email protected]"
}
]
3. Synchronize the data for import:
AwesomeApps request:
POST https://secure.eloqua.com/api/bulk/2.0/syncs
{
"syncedInstanceURI":"/contacts/imports/6",
}
Eloquas Response:
201 Created
{
27 of 85
"syncedInstanceURI" : "/contacts/imports/6",
"status" : "pending",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/6"
}
4. You can then use the syncs uri (/syncs/6) to check the status of the sync:
GET https://secure.eloqua.com/api/bulk/2.0/sync/6
For a full description of the sync status codes, see: Bulk API Sync Status Codes
When the sync is complete, Eloquas response will resemble:
200 OK
{
"syncedInstanceURI" : "/contacts/imports/6",
"syncStartedAt" : "2014-01-01T13:59:07.1375620Z",
"syncEndedAt" : "2014-01-01T13:59:14.1375620Z",
"status" : "success",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/6"
}
If you run into trouble or have questions about theBulk API, check out theBulk APIdocumentation.
28 of 85
Eloqua signs all outgoing calls with OAuth 1.0a so the receiving system can validate that the call was
sent by Eloqua. Refer to the OAuth 1.0a spec or OAuth 1.0 RFC for more information.
29 of 85
30 of 85
POST
31 of 85
https://example.com/awesomeapp/content/create?instance=f82d50cd86a9-4fca-b37e-4ec9a98b0339
{}
For a Content service, AwesomeApp's response must include height, width, and default
editorImageUrl specifies the URL for an image that Eloqua will display in the editor's design
surface. editorImageUrl is not a templated URL.
{
"recordDefinition": {
"ContactID": "{{Contact.Id}}"
},
"height": 256,
"width": 256,
"editorImageUrl": "https://example.com/image.png"
}
32 of 85
POST
https://example.com/awesomeapp/decide/notify?instance=f82d50cd86a9-4fca-b37e-4ec9a98b0339&asset=456
{
"offset": 0,
"limit": 1000,
"totalResults": 2,
"count": 2,
"hasMore": false,
"items":
[
{
"ContactID": "1",
"EmailAddress": "[email protected]"
},
{
"ContactID": "2",
"EmailAddress": "[email protected]"
}
]
}
For Content services, AwesomeApp's response will depend on whether the content is for an Email or a
Landing Page:
For Landing Pages, the response is a 200 status code with text/html content inline. If the response
takes too long, Eloqua uses the default content for that contact.
For Email, AwesomeApp can respond in one of two ways:
Inline Response: A 200 status code with text/html content inline, in which case Eloqua uses the
same content for each contact (this is the same response type as used for landing pages), or
Asynchronous Response: A 204 status code, indicating that the call was accepted, but there is
no content to return directly. The service should process asynchronously and then call the
{callbackUrl} parameter with contact-specific content.
Inline Response
The inline response for landing pages and email is a 200 status code, followed by the text/html content.
For example:
{
<div>
33 of 85
<h1>External Content</h1>
<p>This content is used for all recipients for this
request.</p>
</div>
}
Asynchronous Response
For the asynchronous response, AwesomeApp responds with a 204 status code, indicating that the
response will be asynchronous, followed by one or more imports to Eloqua's Bulk API, where contactspecific content is updated with the ContactId and the instance Id, mapping the contact to the new
html content.
The maximum import size per batch is 50,000. If you have more than 50,000 contacts, break
your data up into multiple imports.
1. Create the bulk import definition, including a Content parameter whose value is the service
instance ID and execution ID. Including the execution ID enables you to differentiate between
different uses of the asset, for example, when multiple campaigns use the same email template
that contains the service instance:
POST https://secure.eloqua.com/api/bulk/2.0/contacts/imports
?
{
"name": "AwesomeApp Content Response Bulk Import",
"updateRule": "always",
"fields": {
"EmailAddress": "{{Contact.Field(C_EmailAddress)}}",
"Content": "{{ContentInstance
(f82d50cd86a94fcab37e4ec9a98b0339).Execution[21]}}"
},
"identifierFieldName": "EmailAddress"
}
Eloquas response will be a 201 Created response that includes a uri parameter, which you
can use to identify the import:
34 of 85
"EmailAddress" : "{{Contact.Field(C_EmailAddress)}}",
"Content" : "{{ContentInstance
(f82d50cd86a94fcab37e4ec9a98b0339).Execution[21]}}"
},
"identifierFieldName" : "EmailAddress",
"isSyncTriggeredOnImport" : false,
"isUpdatingMultipleMatchedRecords" : false,
"uri" : "/contacts/imports/6",
"createdBy" : "DocsExample",
"createdAt" : "2014-03-06T13:59:00.6600046Z",
"updatedBy" : "DocsExample",
"updatedAt" : "2014-03-06T13:59:00.6600046Z"
}
2. Send Eloqua the data for import, using the Content parameter with the content the Eloqua
should use for each contact:
POST
https://secure.eloqua.com/api/bulk/2.0/contacts/imports/6/da
ta
[
{
"EmailAddress" : "[email protected]",
"Content" : "<p>This is the content for Fred</p>"
},
{
"EmailAddress" : "[email protected]",
"Content" : "<p>This is the content for Sylvie</p>"
}
]
3. Synchronize the data for import:
AwesomeApps request:
POST https://secure.eloqua.com/api/bulk/2.0/syncs
{
"syncedInstanceURI":"/contacts/imports/6",
}
35 of 85
Eloquas Response:
201 Created
{
"syncedInstanceURI" : "/contacts/imports/6",
"status" : "pending",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/6"
}
4. You can then use the syncs uri (/syncs/6) to check the status of the sync:
GET https://secure.eloqua.com/api/bulk/2.0/sync/6
For a full description of the sync status codes, see: Bulk API Sync Status Codes
When the sync is complete, Eloquas response will resemble:
200 OK
{
"syncedInstanceURI" : "/contacts/imports/6",
"syncStartedAt" : "2014-01-01T13:59:07.1375620Z",
"syncEndedAt" : "2014-01-01T13:59:14.1375620Z",
"status" : "success",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/6"
}
If you run into trouble or have questions about theBulk API, check out theBulk APIdocumentation.
36 of 85
general flow for the instantiation-execution model, you should read that first.
Eloqua signs all outgoing calls with OAuth 1.0a so the receiving system can validate that the call was
sent by Eloqua. Refer to the OAuth 1.0a spec or OAuth 1.0 RFC for more information.
37 of 85
38 of 85
POST
https://example.com/awesomeapp/feeder/create?siteid=123instance=
9347bfe1-9c72-409c-a5cd-402ff74f0caa
{}
AwesomeApps response is 200-level HTTPresponse:
HTTP/1.1 200 Ok
POST
https://example.com/awesomeapp/decide/notify?instance=9347bfe19c72-409c-a5cd-402ff74f0caa&asset=456&status=active
AwesomeApp responds with a 204 response, indicating that the response will be asynchronous,
followed by an import to Eloqua's Bulk API, where AwesomeApp specifies a sync action. For
AppCloud Feeders, the sync action sets the AppCloud Feeder instance's status to markComplete.
Note that the maximum import size per batch is 50,000: if you have more than 50,000 contacts, break
your data up into multiple batches.
When referencing service instances, you must transmit theGUID without dashes. The
Bulk APIwill error if you transmit the GUID with the dashes.
POST https://secure.eloqua.com/api/bulk/2.0/contacts/imports
?
{
39 of 85
{
"name" : "AwesomeApp Feeder Bulk Import",
"updateRule" : "always",
"fields" : {
"emailAddress" : "{{Contact.Field(C_EmailAddress)}}"
},
"identifierFieldName" : "emailAddress",
"syncActions" : [
{
"destination" : "{{FeederInstance
(9347bfe19c72409ca5cd402ff74f0caa)}}",
"action" : "setStatus",
"status" : "markComplete"
}
],
"isSyncTriggeredOnImport" : false,
"isUpdatingMultipleMatchedRecords" : false,
40 of 85
"uri" : "/contacts/imports/6",
"createdBy" : "DocsExample",
"createdAt" : "2014-03-06T13:59:00.6600046Z",
"updatedBy" : "DocsExample",
"updatedAt" : "2014-03-06T13:59:00.6600046Z"
}
2.
POST
https://secure.eloqua.com/api/bulk/2.0/contacts/imports
/6/data
[
{
"emailAddress" : "[email protected]"
},
{
"emailAddress" : "[email protected]"
}
]
3. Synchronize the data for import:
AwesomeApps request:
POST https://secure.eloqua.com/api/bulk/2.0/syncs
{
"syncedInstanceURI":"/contacts/imports/6",
}
Eloquas Response:
201 Created
{
"syncedInstanceURI" : "/contacts/imports/6",
"status" : "pending",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/6"
}
41 of 85
4. You can then use the syncs uri (/syncs/6) to check the status of the sync:
GET https://secure.eloqua.com/api/bulk/2.0/sync/6
For a full description of the sync status codes, see: Bulk API Sync Status Codes
When the sync is complete, Eloquas response will resemble:
200 OK
{
"syncedInstanceURI" : "/contacts/imports/6",
"syncStartedAt" : "2014-01-01T13:59:07.1375620Z",
"syncEndedAt" : "2014-01-01T13:59:14.1375620Z",
"status" : "success",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/6"
}
If you run into trouble or have questions about theBulk API, check out theBulk APIdocumentation.
{UIContext}, which describes the context from which the service was accessed: who accessed
the menu service, from where within the Eloqua UI, etc. By default, the contextual information
includes:
siteId and siteName: these describe the Eloqua "site", generally the company or
organization of the user
userId and userName: the Eloqua username and id for the user who selected the Menu
service
42 of 85
userCulture: the linguistic profile of the user. Eloqua uses Microsofts CultureInfo class to
define culture. For example, for English (United States), the code is en-US; for French
(Canada), fr-CA
assetId and assetName: the ID and name of the asset that the user was viewing when
they opened the Menu
assetType: the type of asset, that the user was viewing when they opened the Menu.
Assets include Account, Campaign, Contact, Landing Page, Template, and so on.
The actual call to AwesomeApp would then resemble:
GET https://example.com/awesome/callout
{
"siteId" : "123",
"siteName" : "Eloqua",
"userId" : "1234",
"userName" : "Docs.Example",
"userCulture" : "en-US",
"assetId" : "4",
"assetName" : "Docs Example Campaign",
"assetType" : "Campaign"
}
Eloqua signs all outgoing calls with OAuth 1.0a so the receiving system can validate that the call was
sent by Eloqua. Refer to the OAuth 1.0a spec or OAuth 1.0 RFC for more information.
43 of 85
When you configure your App, you specify which events to subscribe to in the pattern. Then, when a
marketer triggers one of those events, Eloqua calls out to the configured notification URL with the data
specified in the Firehose pattern.
For example, AwesomeApp has a Firehose service and is configured to request all campaign-related
events. The call to its notification URL would then resemble:
POST https://example.com/firehose
{
"siteId": "123",
"assetId": "9999",
"assetType": "Campaign",
"eventDate": "12/12/2014 12:00:01 AM",
"eventType": "Updated",
"userId": "1234",
"userName": "Docs.Example",
"msgAttributes": {
"name": "name_of_updated_asset",
"statuschangedby": "1234",
"statuschangedat": "12/12/2014 12:00:00 AM"
},
"oath_consumerkey": "stuff"
}
Eloqua signs all outgoing calls with OAuth 1.0a so the receiving system can validate that the call was
sent by Eloqua. Refer to the OAuth 1.0a spec or OAuth 1.0 RFC for more information.
44 of 85
If you have not yet registered any Apps, you will see a No apps have been defined message, and the
Create new App button. If you have already registered an App, it will be listed, alongside the Create
new App button. To register your App, click Create new App.
The Create App screen prompts you to fill in a number of fields that describe your App: the Apps
name and description, URL of its icon, and so on:
3.1.1 Details
These fields are general information about your App
45 of 85
Icon URL:
Name:
Description:
Short Description:
3.1.2 Lifecycle
Enable URL: the URL called when the App is first installed or when it is reconfigured. This is a
templated URL which should include, at a minimum, the {InstallId}, {AppId}, and
{CallbackUrl} parameters. WIthout the callback URL you will not be able to complete the
installation flow if your app requires configuring (for example, to use OAuth).
Status URL: the URL called when a user checks the Apps status. See "Respond When
Eloqua Calls the Status URL" on page 67 for more about calls to the Status URL.
3.1.3 OAuth
Apps for the AppCloud use OAuth for authentication. For more information about configuring OAuth,
refer to the OAuth documentation.
Client ID (App id): Eloqua creates and assigns the App ID when you save your App.
Client Secret: Eloqua generates the secret access token when you save your App. Click Show
to view it.
Callback URL: the URL that the users should be redirected to after installing the app and
authenticating with Eloqua.
When youve filled in all fields, click Save, and your App will be listed on the Apps tab of the AppCloud
Developer area and on the AppCloud Developer landing page.
46 of 85
A modal window opens listing the available service types. Select the service type you wish to register.
Then, fill out the services details: you will have different information you need to supply depending on
the service you are implementing. For example, for a Menu, you need to provide the Action URL,
47 of 85
specify the areas it supports and how Eloqua should present it, and provide the services icon URL,
name, and description; for Content, you will need to fill out instance configuration details, as well as
configure content and notification settings, as well as the general service details. The following
documents describe the service configuration page for each service type:
Menus
Content
Actions
Decisions
Feeders
Firehose
When you are done configuring your service, click Save. A green alert message will appear at the top
of the page indicating the Service has been successfully saved.
48 of 85
The App Page shows all of the App information, including Services, and now includes Publish and
Catalog sections, which are used to grant access to the App. When you register an App, it immediately
becomes available in your instance of Eloqua so you can test it before releasing it to any other
prospective users. When youre ready to release your App, or just to share it with a select few, check
out the App installation tutorial.
49 of 85
Create URL: templated URL pointing to a web poral for creating an instance of this service as
an HTTP POST request. All common URL template parameters are available.
You should be sure to included, at a minimum, the {InstanceId} parameter so that you will
be able to identify the service in the future. On success, this endpoint should return a 200-level
response with the created instance.
Configure URL: templated URL pointing to an endpoint for configuring an instance of this
service as an HTTP GET request. All common URL template parameters are available.
50 of 85
You should be sure to included, at a minimum, the {InstanceId} parameter so that you will
be able to identify the service in the future.
Delete URL: templated URL pointing to an endpoint for deleting an instance of this service
using an HTTP DELETE request. All common URL template parameters are available. On
success, this endpoint should return a 200-level response.
Copy URL: templated URL pointing to an endpoint for creating an instance of this service as an
HTTP POST request. All common URL template parameters are available in addition to
{OriginalInstanceId} parameters so that you can identify the original and newlycreated instances. On success, this endpoint should return a 200-level response with the
created instance. See "Respond When a Marketer Copies a Service Instance" on page 68 for
more information.
Notification versus Polling: Specify whether Eloqua should call out to your service when a
member arrives in an Action Step, or whether you will poll for members periodically.
51 of 85
Notification URL: This url will be called (HTTP POST) when actions are taken on an instance
of this service. This endpoint should return a 2xx level response with an empty body on
success. If this property is not specified, the system will fall back to a polling style approach
without notification. Note that this url can be used along with the recordDefinition
property of the instance to send data.
Notification Content-Type: specifies the content type that the HTML POST request should
use, either application/json or text/csv
Max Records per Notification: number of records to push per HTTP request (between 0 and
50,000)
Status on Notification: specifies what the members status should be set to when a
notification is set. This is only valid if Max Records per Notification is greater than 0. If you set
the Status on Notification to Complete, Eloqua will call out to the notification URLwhen
contacts flow into the action step, and will then push the contacts directly into the next step. If
you set it to Active, you will need to call back into Eloqua to set each contact's status to
complete so they will flow into the next step. See:Develop an Action Service for more
information.
When youre done configuring your service, click Save. A green alert message will appear at the top of
the page indicating the service has been successfully saved.
52 of 85
Small Icon URL: the URL of the icon Eloqua displays when you service is pinned as a favorite
on the campaign canvas.The icon will be 16px by 16px when displayed. It must be a
secureURL.
Name: the name of the service
Description: describes what the service does
Create URL: templated URL pointing to a web poral for creating an instance of this service as
an HTTP POST request. All common URL template parameters are available.
You should be sure to included, at a minimum, the {InstanceId} parameter so that you will
be able to identify the service in the future. On success, this endpoint should return a 200-level
response with the created instance.
Configure URL: templated URL pointing to an endpoint for configuring an instance of this
service as an HTTP GET request. All common URL template parameters are available.
You should be sure to included, at a minimum, the {InstanceId} parameter so that you will
be able to identify the service in the future.
Delete URL: templated URL pointing to an endpoint for deleting an instance of this service
using an HTTP DELETE request. All common URL template parameters are available. On
53 of 85
{OriginalInstanceId} parameters so that you can identify the original and newlycreated instances. On success, this endpoint should return a 200-level response with the
created instance. See "Respond When a Marketer Copies a Service Instance" on page 68 for
more information.
54 of 85
Notification versus Polling: Specify whether Eloqua should call out to your service when a
member arrives in the decision step, or whether your application will poll for members
periodically.
Notification Content-Type: specifies the content type that the HTML POST request should
use, either application/json or text/csv
Max Records per Notification: number of records to push per HTTP request (between 0 and
50,000)
Status on Notification: specifies what the members status should be set to when a
notification is set. This is only valid if Max Records per Notification is greater than 0.
When youre done configuring your service, click Save. A green alert message will appear at the top of
the page indicating the service has been successfully saved.
https://
Name: the name of the service
Description: describes what the service does
55 of 85
Each URL is a templated URL that uses common URL template parameters and some Eloqua Markup
Language parameters. Eloqua replaces these paramters with their appropriate values when it makes a
call. For more about URL templating, See "Introduction to URL Templating" on page 12.
Create URL: templated URL pointing to a web poral for creating an instance of this service as
an HTTP POST request. All common URL template parameters are available.
You should be sure to included, at a minimum, the {InstanceId} parameter so that you will
be able to identify the service in the future. On success, this endpoint should return a 200-level
response with the created instance.
Configure URL: templated URL pointing to an endpoint for configuring an instance of this
service as an HTTP GET request. All common URL template parameters are available.
You should be sure to included, at a minimum, the {InstanceId} parameter so that you will
be able to identify the service in the future.
Delete URL: templated URL pointing to an endpoint for deleting an instance of this service
using an HTTP DELETE request. All common URL template parameters are available. On
success, this endpoint should return a 200-level response.
Copy URL: templated URL pointing to an endpoint for creating an instance of this service as an
HTTP POST request. All common URL template parameters are available in addition to
{OriginalInstanceId} parameters so that you can identify the original and newlycreated instances. On success, this endpoint should return a 200-level response with the
created instance. See "Respond When a Marketer Copies a Service Instance" on page 68 for
more information.
56 of 85
Default content: the HTML content the system should use if the external service is not
accessible. You can leave this field blank if no content is required.
Layout type: choose from flow or fixed. If you choose flow, the external content is input into
your landing page or email with no constraints (except width). If you choose fixed, the external
57 of 85
content will be constrained in height and width, as specified by the content instance, and will not
be configurable from within Eloqua.
HTML Content-Type: specifies the content type that the HTML POST request should use,
either application/json or text/csv
Max record per notification: number of records to push per HTTP request (between 100 and
50,000)
Service Availability: specify if this service applies to Landing Pages, Email, or both.
Landing Page Notification (HTML) URL: templated URL that Landing Page engines should
call out to during render to retrieve the HTML content for the configured instance. In addition to
the common HTML template parameters, the Notification (HTML) URL supports the
58 of 85
Create URL: templated URL pointing to a web poral for creating an instance of this service as
an HTTP POST request. All common URL template parameters are available.
You should be sure to included, at a minimum, the {InstanceId} parameter so that you will
be able to identify the service in the future. On success, this endpoint should return a 200-level
response with the created instance.
Configure URL: templated URL pointing to an endpoint for configuring an instance of this
service as an HTTP GET request. All common URL template parameters are available.
You should be sure to included, at a minimum, the {InstanceId} parameter so that you will
be able to identify the service in the future.
Delete URL: templated URL pointing to an endpoint for deleting an instance of this service
using an HTTP DELETE request. All common URL template parameters are available. On
success, this endpoint should return a 200-level response.
Copy URL: templated URL pointing to an endpoint for creating an instance of this service as an
HTTP POST request. All common URL template parameters are available in addition to
59 of 85
{OriginalInstanceId} parameters so that you can identify the original and newlycreated instances. On success, this endpoint should return a 200-level response with the
created instance. See "Respond When a Marketer Copies a Service Instance" on page 68 for
more information.
Campaign Status Notification URL: This URL is called (HTTP POST) when a campaign
containing an instance of the services status changes, such as when it is activated.
Be sure to include the {AssetId} and {EventType} parameters in the templated URL.
AssetId describes the campaign whose status has changed, and EventType defines the
status. When a campaign is activated, for example EventType will be Active. Otherwise,
you will not be able to identify what the incoming call references.
When youre done configuring your service, click Save. A green alert message will appear at the top of
the page indicating the service has been successfully saved.
60 of 85
dock floats on the right side of the screen in the Eloquas Campaign Canvas or the asset editor
screens. When a marketer clicks on your Menu App, Eloqua calls out to your service on the specified
endpoint URL, passing along information about the asset or area from which your App was launched.
When setting up a Menu service, you will need to provide basic service details, as well as the Menu
Extension Service Details.
Action URL: A templated URL that defines where users are redirected to when they select the
menu item. For example, a new tab with an external page showing information on a Campaign.
Always Show: Select this option to show the menu app no matter where the marketer is inside
of Eloqua.
Supported Areas: The assets/areas within Eloqua that your app will appear to the Marketer.
Layout: in the above screenshot, Vertical Large is selected. You can choose from Window
Open, which opens it in a new window or tab, Vertical Standard, which opens it within the
61 of 85
actual AppCloud Menu dock, or Vertical Large, which opens it within the AppCloud Menu
dock, but in a larger form
https://
Name: the name of the service
Description: describes what the service does
When youre done configuring your service, click Save. A green alert message will appear at the top of
the page indicating the service has been successfully saved.
https://
Name: the name of the service
Description: describes what the service does
62 of 85
Pattern: defines which events trigger a call out to the external application. The service
configuration page includes a list of valid asset types and the event types supported for each
asset, as well as examples of valid patterns.
Notification URL: the URL that Eloqua will call out to with the notification. This is a templated
URL.
When youre done configuring your service, click Save. A green alert message will appear at the top of
the page indicating the service has been successfully saved.
63 of 85
You can choose between granting access to all Eloqua users, using the Publish To App Cloud button,
or to specific users using the Publish to Another Site button.
64 of 85
2. Type the name of the site you want to add in the Give another Site access to [your app name]
box and click Add Site. All Eloqua Instances with that site name will now be able to install the
App.
3. To remove access, simply click the Publish to Another Site button, and then use the Remove
button to revoke access for that user.
https://example.com/awesomeapp/api/enable?enableurl&oauth_
consumerkey=key-key-key-key-key
&oauth_nonce=nonce&oauth_signature_method=SIG-METH&oauth_
timestamp=111111111
65 of 85
&oauth_version=1.0&oauth_
signature=signature&callback=https://secure.eloqua.com/cloud/ena
ble/bla
The app must respond in one of two ways:if the app does not require configuring by the user, it can
return an HTTP200 OK response. Otherwise, it should respond with an HTTP 303 redirect to another
page.The following sections detail each option.
4.4.1 No AdditionalInformationNeeded
In this scenario, there is no need to obtain OAuth authorization for the installing user's instance, nor
any other configuration information. The appropriate response is then:
HTTP/1.1 200 OK
The app install status will be set to the "Ready"and marketers will be able to use it.
https://secure.eloqua.com/cloud/enable/bla
Eloqua provides the callback URLwhen you request it as a template in your templated
enableURL. Calling the callbackURLtells Eloqua that the install status should be set to
"Ready" so that marketers can start using the application.
66 of 85
Applications have an application status associated with them. This status is either up,
down, or maintenance. Calls to the Status URL do not update the application status: they
merely display the applications response to the user who clicked the Status button.
4.5.1 Example
Suppose the user clicked the Status button for AwesomeApp. The call resembles:
GET https://example.com/awesomeapp/status
If AwesomeApp is operating normally, the appropriate response is an 200-level response:
HTTP/1.1 200 OK
Eloqua then displays the Status to the user in a modal window.
67 of 85
Otherwise, if AwesomeApp is down and responds with a 400 or 500-level message, Eloqua indicates
that it was unable to connect to the application. Or that the application is in maintenance mode.
example.com/awesomeapp/decide/copy?instanceId={InstanceId}
&originalId={OriginalInstanceId}
2. Eloqua calls out to the Copy URL, replacing the templated parameters with the original
services GUID, and the new GUID of the copy. AwesomeApp can use the original services
GUID to determine the appropriate configuration options for the copy:
POST example.com/awesomeapp/decide/copy?instanceId=bcbdff6a74dd-41c9-b716-825e4049b776
&originalId=d155213e-cd30-422b-984c-acb33093cb5b
3. AwesomeApp responds in one of two ways: either it replies with an HTTP 200 Ok response,
and no content, in which case Eloqua will use the original services configuration for the new
service, or, AwesomeApp replies with a 200-level HTTP response along with a DTO specifying
how the new service should be configured, as in the following:
HTTP/1.1 200 OK
{
68 of 85
"recordDefinition":
{
"ContactId": "{{Contact.Id}}",
"EmailAddress": "{{Contact.Field(C_EmailAddress)}}
"
}
}
Internally, Eloqua then updates the references in the campaign to the new service instance
GUID, and the new campaign is created.
69 of 85
70 of 85
4.8.1 Shutdown
Eloqua will shut down your app if there were more than 100 calls in the last five minutes, and 25%
of them failed. Eloqua will automatically send an email message to the email address associated with
your provider, with a link you can use to reactivate your app. When the app is shut down, all pending
and future requests are marked as "failed".
GET /apps/a0f6779e-8263-4bfb-a292-9714cd10d1e7/configurations
The response should resemble:
HTTP/1.1 200 OK
{
71 of 85
"uri": "/apps/a0f6779e-8263-4bfb-a2929714cd10d1e7/configurations",
"clientSecret":
"a1ba63f9aae1cc84d91544f15b0af27ab6ced4e42c6145b9cc0425742ecf2a0
da1ba63f9aae1cc84d91544f15b0af27ab6ce",
"name": "Call Example",
"description": "This is a test",
"shortDescription": "This is a test",
"iconUrl": "https://www.example.com/logo.png",
"enableUrl": "http://example.com/enable/{appId}/{installId}/
{userName}/{siteName}/{siteId}",
"statusUrl": "http://example.com/status/{installId}",
"callbackUrl": "http://example.com/callback/{installId}",
"makeAvailableUrl": "https://example.com",
"publishedSites": [
"AwesomeCompany"
],
"status": "Up"
}
The status field indicates the app's current status, either "Up", "Down", or "Maintenance".
Important:You must include all of the fields in the configuration document in thePUT request.
You cannot merely specify a value for the status field.
PUT /apps/a0f6779e-8263-4bfb-a292-9714cd10d1e7/configurations
{
"uri": "/apps/a0f6779e-8263-4bfb-a2929714cd10d1e7/configurations",
"clientSecret":
"a1ba63f9aae1cc84d91544f15b0af27ab6ced4e42c6145b9cc0425742ecf2a0
da1ba63f9aae1cc84d91544f15b0af27ab6ce",
"name": "Call Example",
"description": "This is a test",
"shortDescription": "This is a test",
"iconUrl": "https://www.example.com/logo.png",
"enableUrl": "http://example.com/enable/{appId}/{installId}/
{userName}/{siteName}/{siteId}",
"statusUrl": "http://example.com/status/{installId}",
"callbackUrl": "http://example.com/callback/{installId}",
72 of 85
"makeAvailableUrl": "https://example.com",
"publishedSites": [
"AwesomeCompany"
],
"status": "Maintenance"
}
If successful, Eloqua will respond with an HTTP/1.1 204 No Content.
If you GET the /apps/{id}/configurations endpoint again, the response should reflect the
updated status.
73 of 85
5.1.3 When and how doesmy app get listed on the OracleEloqua
AppCloud site?
See the Building Apps for the Oracle Marketing AppCloud on Topliners for detailed instructions.
74 of 85
5.2.3 Can Iinclude Campaign, Email, Landing Page, Form (etc) fields in
my record definition?
No. The OracleEloqua AppCloud exclusively supports Contact, Account, Activity and Custom Object
fields in its record definition fields. You must use the correct Eloqua MarkupLanguage statement to
reference each field.
75 of 85
5.4 Limits
5.4.1 Are there limits that I should be aware of?
The AppCloudDeveloper Framework relies on the Bulk API. The Bulk APIhas limits on the size of the
staging area for imports and exports, on the amount of data you can import at one time, and on the
number of fields you can include in a record definition. There is also a daily limit on the number of syncs
you can perform. See: Bulk API Limits for more information.
76 of 85
77 of 85
6 Reference
6.1 URL Parameters
These parameters are available to use in templated URLs. See "Introduction to URL Templating" on
page 12 for more information.
6.1.1 GeneralParameters
Url Parameter
Description
GUID that
describes the
InstanceId
specific
instance of the
service
GUID that
describes the
InstallId
instance of the
App
ID of the
AssetId
referencing
asset
Name of the
AssetName
referencing
asset
Type of the
referencing
asset
AssetType
(Campaign,
form, landing
page)
Specific to
Copy URL OriginalInstanceId provides
original
Supported?
Firehose Decisions Actions Feeders Menus Content
No
Yes
Yes
Yes
No
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
No
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
No
Yes
Yes
Yes
No
Yes
No
Yes
Yes
Yes
No
Yes
No
Yes
Yes
Yes
No
Yes
InstanceId
Specific to
Copy URL OriginalInstallId provides
original
InstallId
OriginalAssetId
Specific to
Copy URL -
78 of 85
Url Parameter
Description
Supported?
Firehose Decisions Actions Feeders Menus Content
provides
original
AssetId
Specific to
Copy URL OriginalAssetName provides
original
No
Yes
Yes
Yes
No
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
No
No
Yes1
No
No
AssetName
UserName
UserId
UserCulture
SiteName
SiteId
AppId
EventType
Name of the
user that
Yes
triggered the
call
ID of the user
that triggered Yes
the call
Culture of the
user that
No
triggered the
call
Name of
Eloqua
instance the
Yes
user comes
from
GUID-based ID
for the Eloqua
instance the
Yes
user comes
from
GUID-based ID
Yes
of that app
Status change
that triggered
the call
Yes
(Created,
Activated,
Draft, etc.)
CallbackUrl
Description
URL that app must call into when the app configuration is complete during
installation. Should always be included in enable URL during App Registration.
1Feeders only support the Created, Activated, Draft, and Complete events.
79 of 85
Description
Notes
0: no render
1: EmailSend
2: LiveWeb
3: EmailPreview
4: WebPreview
5: EmailSaved
RenderType
Unique to
EmailNotification
URL
IsPreview
VisitorId
6.2 PUT
Unique to
EmailNotification
URL
0: False
1: True
IDof the visitor for whom you wish to construct a landing page
Unique to
Landing Page
Notification URL
/actions/instances/{id}
id
type
GUID
description
Unique identifier for that service instance
recordDefinition
type
description
Dictionary Defines the mapping between your fields and Eloqua's
of strings fields
80 of 85
6.2.3 Example
Update the record definition of the AppCloud action instance withGUID 7b95fe48-6598-
43e8-8fd1-dcb40cf83ef6
PUT /actions/instances/7b95fe48-6598-43e8-8fd1-dcb40cf83ef6
{
"recordDefinition": {
"ContactID": "{{Contact.Id}}",
"EmailAddress": "{{Contact.Field(C_EmailAddress)}}",
}
}
6.3 PUT
/contents/instances/{id}
id
type
GUID
description
Unique identifier for that service instance
recordDefinition
height
width
editorImageUrl
type
description
Dictionary Defines the mapping between your fields and Eloqua's
of strings fields
Integer
Height of the image
Integer
URL
81 of 85
6.3.3 Example
Update the record definition of the AppCloud content instance withGUID 7b95fe48-
6598-43e8-8fd1-dcb40cf83ef6
PUT /contents/instances/7b95fe48-6598-43e8-8fd1-dcb40cf83ef6
{
"recordDefinition": {
"ContactID": "{{Contact.Id}}",
"EmailAddress": "{{Contact.Field(C_EmailAddress)}}",
},
"height": 256,
"width": 256,
"editorImageUrl": "https://example.com/image.png"
}
6.4 PUT
/decisions/instances/{id}
id
type
GUID
description
Unique identifier for that service instance
recordDefinition
type
description
Dictionary Defines the mapping between your fields and Eloqua's
of strings fields
6.4.3 Example
Update the record definition of the AppCloud decision instance withGUID 7b95fe48-
82 of 85
6598-43e8-8fd1-dcb40cf83ef6
PUT /decisions/instances/7b95fe48-6598-43e8-8fd1dcb40cf83ef6
{
"recordDefinition": {
"ContactID": "{{Contact.Id}}",
"EmailAddress": "{{Contact.Field(C_EmailAddress)}}",
}
}
6.5 GET
/apps/{id}/configurations
id
type
GUID
description
Unique identifier for that service instance
6.5.3 Example
Retrieve the App configuration file for the App with GUID 7b95fe48-6598-43e8-8fd1-
dcb40cf83ef6
GET /apps/7b95fe48-6598-43e8-8fd1dcb40cf83ef6/configurations
83 of 85
6.6 PUT
/apps/{id}/configurations
Warning:changes to the configuration file directly affect the app. Accidentally changing the
enableUrl, for example, will result in people being unable to install your app. Ensure that
any changes you push out are intentional.
id
type
GUID
description
Unique identifier for that service instance
uri
clientSecret
name
description
shortDescription
iconUrl
enableUrl
statusUrl
callbackUrl
makeAvailableUrl
publishedSites
status
URI
type
description
specific URIthat describes the app
token
string
string
string
6.6.3 Example
Set the status for the App with GUID 7b95fe48-6598-43e8-8fd1-dcb40cf83ef6
84 of 85
to Down.
PUT /apps/7b95fe48-6598-43e8-8fd1dcb40cf83ef6/configurations
{
"uri": "/apps/a0f6779e-8263-4bfb-a2929714cd10d1e7/configurations",
"clientSecret":
"a1ba63f9aae1cc84d91544f15b0af27ab6ced4e42c6145b9cc0425742ec
f2a0da1ba63f9aae1cc84d91544f15b0af27ab6ce",
"name": "Call Example",
"description": "This is a test",
"shortDescription": "This is a test",
"iconUrl": "https://www.example.com/logo.png",
"enableUrl": "http://example.com/enable/{appId}/
{installId}/{userName}/{siteName}/{siteId}",
"statusUrl": "http://example.com/status/{installId}",
"callbackUrl": "http://example.com/callback/{installId}
",
"makeAvailableUrl": "https://example.com",
"publishedSites": [
"AwesomeCompany"
],
"status": "Down"
}
85 of 85