Structure of simple CPA interaction [legend]:

General Overview

       [HTTP connection]                [SMS conversation]
[CP] ...................... [CPA] <===== content request ====== [DC]

[CP] <== content-request == [CPA] ............................. [DC]
[CP] ------ Accepted -----> [CPA] ............................. [DC]

[CP] ====== content ======> [CPA] ............................. [DC]
[CP] <----- Accepted ------ [CPA] ............................. [DC] wrong request

[CP] ...................... [CPA] ========== content =========> [DC]

[CP] <== delivery report == [CPA] ............................. [DC]
[CP] ------ Accepted -----> [CPA] ............................. [DC]

Note: SMPP gateway messages (passed back to CPA after sending something to subscriber) aren't shown here as more low-level, but that's how CPA gets the message status for e.g. delivery reports.

Note 2: error messages supposed to be passed to subscriber must be marked as free by means of paid="false" attribute!