Where Can I Find Tendenci's API Documentation

Currently, our API Documentation is still being developed.

If you're a developer looking to integrate with Tendenci - we'd love to talk with you! 

Email us at support@tendenci.com and check out our open source Github Page to view and download Tendenci's source code. 

Looking to Integrate Your App's APIs with Tendenci?

Come take a look at Tendenci's integration with Campaign Monitor's email newsletter software using Campaign Monitor's APIs to use as an example. You can find the full code for our Campaign Monitor integration module at: https://github.com/tendenci/tendenci/tree/master/tendenci/addons/campaign_monitor

https://github.com/tendenci/tendenci/blob/master/tendenci/addons/campaign_monitor/models.py shows you how the models for the integration are defined to sync data between a Tendenci website and a Campaign Monitor account. Each of the models defined is responsible for a different set of functions to manage data sharing between Tendenci and Campaign Monitor. 

Here's explanations for some of the models with code snippets.

ListMap model syncs data for specific campaign monitor subscriber lists using # list id from campaign monitor:

class ListMap(models.Model):
    group = models.ForeignKey(Group)
    # list id for campaign monitor
    list_id = models.CharField(max_length=100)
    create_dt = models.DateTimeField(auto_now_add=True)
    update_dt = models.DateTimeField(auto_now=True)
    last_sync_dt = models.DateTimeField(null=True)
    
    def __unicode__(self):
        if self.group:
            return self.group.name
        return ''

GroupQueue model so that new Tendenci User Groups create new Subscriber lists on Campaign Monitor and can stay sync'd:

class GroupQueue(models.Model):
    group = models.ForeignKey(Group)
    

SubscriberQueue model for managing individual users on Tendenci with their corresponding subscriptions in Campaign Monitor:

class SubscriberQueue(models.Model):
    group = models.ForeignKey(Group)
    user = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
    subscriber = models.ForeignKey(FormEntry, null=True)

Template model represents a newsletter template in Campaign Monitor. This includes information specific to a newsletter template like the location of the html and .zip files for each template and the preview and screenshot views:

class Template(models.Model):
    """
This represents a Template in Campaign Monitor.
"""
    class Meta:

= (("view_template","Can view template"),)

    template_id = models.CharField(max_length=100, unique=True, null=True)
    name = models.CharField(max_length=100)
    create_dt = models.DateTimeField(auto_now_add=True)
    update_dt = models.DateTimeField(auto_now=True)
    
    #get only
    cm_preview_url = models.URLField(null=True)
    cm_screenshot_url = models.URLField(null=True)
    
    #post only
    html_file = models.FileField(upload_to=file_directory, null=True)
    zip_file = models.FileField(upload_to=file_directory, null=True)
    
    @property
    def content_type(self):
        return 'template'
    
    @models.permalink
    def get_absolute_url(self):
        return ("campaign_monitor.template_view", [self.template_id])
    
    @models.permalink
    def get_html_url(self):
        return ("campaign_monitor.template_html", [self.template_id])
    
    @models.permalink
    def get_html_original_url(self):
        return ("campaign_monitor.template_html_original", [self.template_id])
    
    @models.permalink
    def get_render_url(self):
        return ("campaign_monitor.template_render", [self.template_id])
    
    @models.permalink
    def get_text_url(self):
        return ("campaign_monitor.template_text", [self.template_id])
    
    def get_zip_url(self):
        if self.zip_file:
            return self.zip_file.url
        return ''
        
    def get_media_url(self):
        if self.zip_file:
            return "%scampaign_monitor/%s" % (settings.MEDIA_URL, self.template_id)
        return ''
        
    def __unicode__(self):
        return self.name
    
    def save(self, *args, **kwargs):
        super(Template, self).save(*args, **kwargs)
        if self.html_file:
            set_s3_file_permission(self.html_file.file, public=True)
        if self.zip_file:
            set_s3_file_permission(self.zip_file.file, public=True)
        

Campaign model represents a campaign in Campaign Monitor. Campaigns are the individual newsletters that are created using templates, and you'll see fields defined that represent the unique elements a campaign has for identifying it, such as the date the campaign was sent and the subject of the email campaign. This information is used to sync details of a campaign monitor newsletter so you can view, manage, and create email campaigns from within your Tendenci Super User admin console: 

 

class Campaign(models.Model):

 

    """

 

This represents a Campaign. It is considered as a "Draft" if it is

 

not yet sent.
"""
    
    class Meta:
        permissions = (("view_campaign","Can view campaign"),)
    
    STATUS_CHOICES = (
        ('S','Sent'),
        ('C', 'Scheduled'),
        ('D', 'Draft'),
    )
    
    campaign_id = models.CharField(max_length=100, unique=True)
    create_dt = models.DateTimeField(auto_now_add=True)
    update_dt = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=1, choices=STATUS_CHOICES, default='D')
    
    #fields for sync
    name = models.CharField(max_length=100)
    subject = models.CharField(max_length=100)
    lists = models.ManyToManyField(ListMap)
    
    #fields for sent campaigns
    sent_date = models.DateTimeField(null=True, blank=True)
    web_version_url = models.URLField(null=True, blank=True)
    total_recipients = models.IntegerField(default=0)
    
    #fields for scheduled campaigns
    scheduled_date = models.DateTimeField(null=True, blank=True)
    scheduled_time_zone = models.CharField(max_length=100, null=True, blank=True)
    preview_url = models.URLField(null=True, blank=True)
    
    #fields for post only
    from_name = models.CharField(max_length=100, null=True, blank=True)
    from_email = models.EmailField(null=True, blank=True)
    reply_to = models.EmailField(null=True, blank=True)
    template = models.ForeignKey(Template, null=True, blank=True)
    
    @models.permalink
    def get_absolute_url(self):
        return ("campaign_monitor.campaign_view", [self.campaign_id])
        
    def __unicode__(self):
        return self.name

 

DID THIS HELP FILE ANSWER YOUR QUESTION?  IF NOT - EMAIL YOUR QUESTION TO OUR SUPPORT TEAM OR VISIT OUR TENDENCI FORUMS FOR MORE HELP!