`). * * - POST /contacts {email, name, campaign: {campaignId}, customFieldValues: [{customFieldId, value: [v]}]} * (202 Accepted; 409 "contact already added" counts as success) * - lists (campaigns): GET /campaigns?perPage=100 → [{campaignId, name}] */ final class GetResponse extends EmailProvider { public const BASE = 'https://api.getresponse.com/v3'; public function id(): string { return 'getresponse'; } public function label(): string { return 'GetResponse'; } public function configured(): bool { return Credentials::has('getresponse_api_key'); } /** @return array */ private function headers(): array { return ['X-Auth-Token' => 'api-key ' . Credentials::get('getresponse_api_key')]; } public function lists() { if (!$this->configured()) { return new WP_Error('zadex_integration_not_configured', 'GetResponse API key missing.'); } $r = Http::request('GET', self::BASE . '/campaigns?perPage=100', ['headers' => $this->headers()]); return $r instanceof WP_Error ? $r : self::options($r['json'] ?? [], 'campaignId', 'name'); } public function subscribe(array $contact) { $body = ['email' => $contact['email'], 'campaign' => ['campaignId' => $contact['list']]]; if ($contact['name'] !== '') { $body['name'] = $contact['name']; } foreach ($contact['fields'] as $field => $value) { $body['customFieldValues'][] = ['customFieldId' => (string) $field, 'value' => [$value]]; } $r = Http::json('POST', self::BASE . '/contacts', $body, $this->headers()); if ($r instanceof WP_Error && Http::status($r) !== 409) { return $r; } return true; } }