{"openapi":"3.0.0","paths":{"/v1/oauth/token":{"post":{"operationId":"V1AuthController_token","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1TokenRequestDto"}}}},"responses":{"200":{"description":"Access token issued"}},"summary":"Exchange client credentials for a V1 partner access token","tags":["V1 Authentication"]}},"/v1/agencies":{"get":{"operationId":"V1AgenciesController_list","parameters":[{"name":"page","required":false,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"page_size","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"default":25,"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"List agencies available to the partner","tags":["V1 Agencies"]}},"/v1/agencies/{agencyId}":{"get":{"operationId":"V1AgenciesController_get","parameters":[{"name":"agencyId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"Get agency details","tags":["V1 Agencies"]}},"/v1/agents":{"get":{"operationId":"V1AgentsController_list","parameters":[{"name":"page","required":false,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"page_size","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"default":25,"type":"number"}},{"name":"agency_id","required":false,"in":"query","schema":{"type":"string"}},{"name":"project_id","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"List agents for an agency or project","tags":["V1 Agents"]}},"/v1/projects":{"get":{"operationId":"V1ProjectsController_list","parameters":[{"name":"page","required":false,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"page_size","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"default":25,"type":"number"}},{"name":"project_type","required":false,"in":"query","schema":{"type":"string","enum":["apartment","house_and_land","land_estate","townhouse","mixed"]}},{"name":"status","required":false,"in":"query","schema":{"type":"string"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"List project-level campaign contexts","tags":["V1 Projects"]}},"/v1/projects/{projectId}":{"get":{"operationId":"V1ProjectsController_get","parameters":[{"name":"projectId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"Get project-level campaign context","tags":["V1 Projects"]}},"/v1/campaigns":{"get":{"operationId":"V1CampaignsController_list","parameters":[{"name":"page","required":false,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"page_size","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"default":25,"type":"number"}},{"name":"project_id","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string"}},{"name":"campaign_type","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"List marketing campaigns","tags":["V1 Campaigns"]},"post":{"operationId":"V1CampaignsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CreateCampaignDto"}}}},"responses":{"201":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"Create a marketing campaign","tags":["V1 Campaigns"]}},"/v1/campaigns/{campaignId}":{"get":{"operationId":"V1CampaignsController_get","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"Get a marketing campaign","tags":["V1 Campaigns"]},"put":{"operationId":"V1CampaignsController_update","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1UpdateCampaignDto"}}}},"responses":{"200":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"Update a marketing campaign","tags":["V1 Campaigns"]}},"/v1/campaigns/{campaignId}/pause":{"post":{"operationId":"V1CampaignsController_pause","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CampaignActionDto"}}}},"responses":{"201":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"Pause a campaign without deleting it","tags":["V1 Campaigns"]}},"/v1/campaigns/{campaignId}/resume":{"post":{"operationId":"V1CampaignsController_resume","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CampaignActionDto"}}}},"responses":{"201":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"Resume a paused campaign","tags":["V1 Campaigns"]}},"/v1/campaigns/{campaignId}/archive":{"post":{"operationId":"V1CampaignsController_archive","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CampaignActionDto"}}}},"responses":{"201":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"Archive a campaign without deleting it","tags":["V1 Campaigns"]}},"/v1/campaigns/{campaignId}/performance":{"get":{"operationId":"V1CampaignsController_performance","parameters":[{"name":"campaignId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"Get campaign performance summary","tags":["V1 Campaigns"]}},"/v1/reports/campaigns":{"get":{"operationId":"V1ReportsController_campaignReport","parameters":[{"name":"page","required":false,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"page_size","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"default":25,"type":"number"}},{"name":"project_id","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string"}},{"name":"campaign_type","required":false,"in":"query","schema":{"type":"string"}},{"name":"start_date","required":false,"in":"query","schema":{"type":"string"}},{"name":"end_date","required":false,"in":"query","schema":{"type":"string"}},{"name":"format","required":false,"in":"query","schema":{"default":"json","type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"Get campaign report data","tags":["V1 Reports"]}},"/v1/reports/campaigns.csv":{"get":{"operationId":"V1ReportsController_campaignReportCsv","parameters":[{"name":"page","required":false,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"page_size","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"default":25,"type":"number"}},{"name":"project_id","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string"}},{"name":"campaign_type","required":false,"in":"query","schema":{"type":"string"}},{"name":"start_date","required":false,"in":"query","schema":{"type":"string"}},{"name":"end_date","required":false,"in":"query","schema":{"type":"string"}},{"name":"format","required":false,"in":"query","schema":{"default":"json","type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"Export campaign report data as CSV","tags":["V1 Reports"]}},"/v1/leads":{"get":{"operationId":"V1LeadsController_list","parameters":[{"name":"page","required":false,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"page_size","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"default":25,"type":"number"}},{"name":"project_id","required":false,"in":"query","schema":{"type":"string"}},{"name":"campaign_id","required":false,"in":"query","schema":{"type":"number"}},{"name":"status","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"List campaign and project leads","tags":["V1 Leads"]},"post":{"operationId":"V1LeadsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CreateLeadDto"}}}},"responses":{"201":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"Create a campaign or project lead","tags":["V1 Leads"]}},"/v1/leads/{leadId}":{"get":{"operationId":"V1LeadsController_get","parameters":[{"name":"leadId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"Get a lead","tags":["V1 Leads"]}},"/v1/webhooks/subscriptions":{"get":{"operationId":"V1WebhooksController_list","parameters":[{"name":"page","required":false,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"page_size","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"default":25,"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"List webhook subscriptions","tags":["V1 Webhooks"]},"post":{"operationId":"V1WebhooksController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CreateWebhookSubscriptionDto"}}}},"responses":{"201":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"Create a signed webhook subscription","tags":["V1 Webhooks"]}},"/v1/webhooks/subscriptions/{subscriptionId}":{"get":{"operationId":"V1WebhooksController_get","parameters":[{"name":"subscriptionId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"Get webhook subscription details","tags":["V1 Webhooks"]}},"/v1/webhooks/subscriptions/{subscriptionId}/validate":{"post":{"operationId":"V1WebhooksController_validate","parameters":[{"name":"subscriptionId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1ValidateWebhookSubscriptionDto"}}}},"responses":{"201":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"Validate a webhook subscription","tags":["V1 Webhooks"]}},"/v1/webhooks/subscriptions/{subscriptionId}/delivery":{"get":{"operationId":"V1WebhooksController_delivery","parameters":[{"name":"subscriptionId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"Get webhook delivery status","tags":["V1 Webhooks"]}},"/v1/webhooks/subscriptions/{subscriptionId}/archive":{"post":{"operationId":"V1WebhooksController_archive","parameters":[{"name":"subscriptionId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"Archive a webhook subscription","tags":["V1 Webhooks"]}},"/v1/integrations":{"get":{"operationId":"V1IntegrationsController_list","parameters":[{"name":"page","required":false,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"page_size","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"default":25,"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"List connected partner integrations","tags":["V1 Integrations"]}},"/v1/integrations/{integrationId}":{"get":{"operationId":"V1IntegrationsController_get","parameters":[{"name":"integrationId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"Get connected partner integration","tags":["V1 Integrations"]}},"/v1/integrations/{integrationId}/disconnect":{"post":{"operationId":"V1IntegrationsController_disconnect","parameters":[{"name":"integrationId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"partner-oauth":[]}],"summary":"Disconnect a partner integration","tags":["V1 Integrations"]}}},"info":{"title":"REP Partner API","description":"Public V1 partner API for media agency, agent, project, campaign, lead, webhook, report, and integration workflows.","version":"1.0","contact":{}},"tags":[{"name":"V1 Authentication","description":"Partner OAuth client credentials"},{"name":"V1 Agencies","description":"Agency account context"},{"name":"V1 Agents","description":"Agent directory and assignment context"},{"name":"V1 Projects","description":"Project-level campaign contexts"},{"name":"V1 Campaigns","description":"Marketing campaign lifecycle"},{"name":"V1 Reports","description":"Campaign reporting and CSV exports"},{"name":"V1 Leads","description":"Campaign and project leads"},{"name":"V1 Webhooks","description":"Signed partner webhook subscriptions"},{"name":"V1 Integrations","description":"Connected advertising integrations"}],"servers":[{"url":"https://api.realestateprojects.au","description":"Production"},{"url":"http://localhost:3006","description":"Development"}],"components":{"securitySchemes":{"partner-oauth":{"scheme":"bearer","bearerFormat":"REP Partner Access Token","type":"http","name":"Authorization","description":"Use a V1 access token from POST /v1/oauth/token: Bearer <access_token>","in":"header"}},"schemas":{"V1TokenRequestDto":{"type":"object","properties":{"grant_type":{"type":"string","example":"client_credentials"},"client_id":{"type":"string","description":"API key prefix issued by REP, for example rep_live_ak_ab12cd34ef56"},"client_secret":{"type":"string","description":"The full API key secret issued once by the API key endpoint"},"scope":{"type":"string","description":"Optional space-separated scope subset for the access token"}},"required":["grant_type","client_id","client_secret"]},"V1CreateCampaignDto":{"type":"object","properties":{"title":{"type":"string"},"agency_id":{"type":"string"},"project_ids":{"type":"array","items":{"type":"string"}},"project_id":{"type":"string"},"advertising_product_id":{"type":"string"},"budget":{"type":"number"},"start_date":{"type":"string"},"end_date":{"type":"string"},"campaign_type":{"type":"string"},"objective":{"type":"string"},"targeting":{"type":"object"},"creative_assets":{"type":"object"}},"required":["title","agency_id"]},"V1UpdateCampaignDto":{"type":"object","properties":{"title":{"type":"string"},"budget":{"type":"number"},"start_date":{"type":"string"},"end_date":{"type":"string"},"targeting":{"type":"object"},"creative_assets":{"type":"object"}}},"V1CampaignActionDto":{"type":"object","properties":{"reason":{"type":"string"}}},"V1CreateLeadDto":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"project_id":{"type":"string"},"campaign_id":{"type":"number"},"agent_id":{"type":"string"},"source":{"type":"string"},"enquiry_type":{"type":"string"},"metadata":{"type":"object"}},"required":["first_name","last_name"]},"V1CreateWebhookSubscriptionDto":{"type":"object","properties":{"target_url":{"type":"string","example":"https://partner.example.com/rep/webhooks"},"event_types":{"example":["campaign.created","campaign.updated","lead.created"],"type":"array","items":{"type":"string"}},"description":{"type":"string"},"filters":{"type":"object"}},"required":["target_url","event_types"]},"V1ValidateWebhookSubscriptionDto":{"type":"object","properties":{"validation_token":{"type":"string"}},"required":["validation_token"]}}}}