PlaceCal API Reference

API fields are based on files in /app/graphql/types/**, but converted to camelCase.

Data Structures

Either specified by the query with these fields or returned from the server in this structure

PingType: String


NeighbourhoodType {
  name: String
  abbreviatedName: String
  unit: String
  unitName: String
  unitCodeKey: String
  unitCodeValue: String
}

ContactType {
  name: String
  email: String
  telephone: String
}

OpeningHoursType {
  dayOfWeek: String
  opens: String
  closes: String
}

AddressType {
  streetAddress: String
  postalCode: String
  addressLocality: String
  addressRegion: String
  neighbourhood: NeighbourhoodType
}

PartnerType {
  id: ID
  name: String
  summary: String
  description: String
  accessibilitySummary: String
  logo: String
  url: String
  facebookUrl: String
  twitterUrl: String
  address: AddressType
  areasServed: [NeighbourhoodType]
  contact: ContactType
  openingHours: OpeningHoursType
	articles: [Article]
}

EventType {
  id: ID
  name: String
  summary: String
  description: String
  startDate: ISO88601Format
  endDate: ISO88601Format
  address: AddressType
  organizer: PartnerType
}

ArticleType {
  name: String
  headline: String
  text: String
  articleBody: String
  datePublished: ISO88601Format
  dateCreated: ISO88601Format
  dateUpdated: ISO88601Format
  providers: [Partners]
}

Making queries

Currently we only serve read queries and no mutations. The examples are written in javascript.

The following code is a bare-bones query wrapper using the node-fetch npm module.

import fetch from 'node-fetch';

const endPoint = 'http://192.168.0.39:3000/api/v1/graphql';

function query (query, variables) {
  return new Promise((resolve, reject) => {
    fetch(endPoint, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
      },
      body: JSON.stringify({
        variables,
        query
      })
    })
    .then(r => r.json())
    .then(data => resolve(data))
  });
}

Ping

/* 
An empty call that tests if you're code is working and responds
with a simple message.
*/

query("{ping}")
  .then( (response) => {
    console.log(response);
  });

/* response */
{
  data: { ping: 'Hello World! The time is 2022-03-21 11:10:20 +0000' }
}

Event (show)

let queryString = `
  query Event($id: ID!) { 
    event(id: $id) { 
      id
      name
      summary
      description
      startDate
      endDate
      address {
        streetAddress
        postalCode
        addressLocality
        addressRegion
      }
      organizer {
        id
        name
      }
    }
  }`;

query(queryString, { id: 2 })
  .then( (response) => {
    console.log(JSON.stringify(response, null, 2));
  });

/* response */

{
  "data": {
    "event": {
      "id": "2",
      "name": "event 0: A summary of an event",
      "summary": "event 0: A summary of an event",
      "description": "A longer description of this event",
      "startDate": "2022-02-10 00:00:00 +0000",
      "endDate": null,
      "address": {
        "streetAddress": "123 A Street, A place",
        "postalCode": "SE2 0QG",
        "addressLocality": "Belvedere",
        "addressRegion": "London (region)"
      },
      "organizer": null
    }
  }
}

Events (index)

Shows a set of events in managable chunks. Can be used to load events on demand for pagination/infinite scroll. It’s a bit tricky so there’s an explanation of how connections work.

let queryString = `
  query EventConnection($first: Int, $after: String) { 
    eventConnection(first: $first, after: $after) {
      pageInfo {
        hasNextPage
				endCursor
      }
      edges {
        cursor
        node {
          id
          name
          summary
          description
          startDate
          endDate
          address {
            streetAddress
            postalCode
            addressLocality
            addressRegion
          }
          organizer {
            id
            name
          }
        }
      }
    }
  }`;

/* return the first block of events */
query(queryString, {first: 5})
  .then( (response) => {
    console.log(JSON.stringify(response, null, 2));
  });

/* first response */
"data": {
    "eventConnection": {
      "pageInfo": {
        "hasNextPage": true
      },
      "edges": [
        {
          "cursor": "MQ",
          "node": {
            "id": "2",
            "name": "event 0: A summary of an event",
            "summary": "event 0: A summary of an event",
            "description": "A longer description of this event",
            "startDate": "2022-02-10 00:00:00 +0000",
            "endDate": null,
            "address": {
              "streetAddress": "123 A Street, A place",
              "postalCode": "SE2 0QG",
              "addressLocality": "Belvedere",
              "addressRegion": "London (region)"
            },
            "organizer": null
          }
        },
        {
          "cursor": "Mg",
          "node": {
            "id": "3",
            "name": "event 1: A summary of an event",
            "summary": "event 1: A summary of an event",
            "description": "A longer description of this event",
            "startDate": "2022-02-10 00:00:00 +0000",
            "endDate": null,
            "address": {
              "streetAddress": "123 A Street, A place",
              "postalCode": "SE2 0QG",
              "addressLocality": "Belvedere",
              "addressRegion": "London (region)"
            },
            "organizer": null
          }
        },
        {
          "cursor": "Mw",
          "node": {
            "id": "4",
            "name": "event 2: A summary of an event",
            "summary": "event 2: A summary of an event",
            "description": "A longer description of this event",
            "startDate": "2022-02-10 00:00:00 +0000",
            "endDate": null,
            "address": {
              "streetAddress": "123 A Street, A place",
              "postalCode": "SE2 0QG",
              "addressLocality": "Belvedere",
              "addressRegion": "London (region)"
            },
            "organizer": null
          }
        },
        {
          "cursor": "NA",
          "node": {
            "id": "5",
            "name": "event 3: A summary of an event",
            "summary": "event 3: A summary of an event",
            "description": "A longer description of this event",
            "startDate": "2022-02-10 00:00:00 +0000",
            "endDate": null,
            "address": {
              "streetAddress": "123 A Street, A place",
              "postalCode": "SE2 0QG",
              "addressLocality": "Belvedere",
              "addressRegion": "London (region)"
            },
            "organizer": null
          }
        },
        {
          "cursor": "NQ",
          "node": {
            "id": "6",
            "name": "event 4: A summary of an event",
            "summary": "event 4: A summary of an event",
            "description": "A longer description of this event",
            "startDate": "2022-02-10 00:00:00 +0000",
            "endDate": null,
            "address": {
              "streetAddress": "123 A Street, A place",
              "postalCode": "SE2 0QG",
              "addressLocality": "Belvedere",
              "addressRegion": "London (region)"
            },
            "organizer": null
          }
        }
      ]
    }
  }
}

/*
Notes on connection pagination:
Cursors are GraphQL's way of identifying a record in a connection.
They act like IDs but are more complicated for reasons.

Input parameters
  first: limit the number of records to return
  after: only fetch records that follow on from this cursor

In the response each record is wrapped in an 'edge' that contains 
the GQL cursor identifier.

pageInfo:
  hasNextPage: (boolean) there are records that follow from this block
  endCursor: (string) the cursor of the last record retrieved 
*/

/* then to get the next block of events */
query(queryString, {first: 5, after: "NQ"})
  .then( (response) => {
    console.log(JSON.stringify(response, null, 2));
  });

/* second response */
{
  "data": {
    "eventConnection": {
      "pageInfo": {
        "hasNextPage": true
      },
      "edges": [
        {
          "cursor": "Ng",
          "node": {
            "id": "7",
            "name": "event 5: A summary of an event",
            "summary": "event 5: A summary of an event",
            "description": "A longer description of this event",
            "startDate": "2022-02-10 00:00:00 +0000",
            "endDate": null,
            "address": {
              "streetAddress": "123 A Street, A place",
              "postalCode": "SE2 0QG",
              "addressLocality": "Belvedere",
              "addressRegion": "London (region)"
            },
            "organizer": null
          }
        },
        {
          "cursor": "Nw",
          "node": {
            "id": "8",
            "name": "event 6: A summary of an event",
            "summary": "event 6: A summary of an event",
            "description": "A longer description of this event",
            "startDate": "2022-02-10 00:00:00 +0000",
            "endDate": null,
            "address": {
              "streetAddress": "123 A Street, A place",
              "postalCode": "SE2 0QG",
              "addressLocality": "Belvedere",
              "addressRegion": "London (region)"
            },
            "organizer": null
          }
        },
        {
          "cursor": "OA",
          "node": {
            "id": "9",
            "name": "event 7: A summary of an event",
            "summary": "event 7: A summary of an event",
            "description": "A longer description of this event",
            "startDate": "2022-02-10 00:00:00 +0000",
            "endDate": null,
            "address": {
              "streetAddress": "123 A Street, A place",
              "postalCode": "SE2 0QG",
              "addressLocality": "Belvedere",
              "addressRegion": "London (region)"
            },
            "organizer": null
          }
        },
        {
          "cursor": "OQ",
          "node": {
            "id": "10",
            "name": "event 8: A summary of an event",
            "summary": "event 8: A summary of an event",
            "description": "A longer description of this event",
            "startDate": "2022-02-10 00:00:00 +0000",
            "endDate": null,
            "address": {
              "streetAddress": "123 A Street, A place",
              "postalCode": "SE2 0QG",
              "addressLocality": "Belvedere",
              "addressRegion": "London (region)"
            },
            "organizer": null
          }
        },
        {
          "cursor": "MTA",
          "node": {
            "id": "11",
            "name": "event 9: A summary of an event",
            "summary": "event 9: A summary of an event",
            "description": "A longer description of this event",
            "startDate": "2022-02-10 00:00:00 +0000",
            "endDate": null,
            "address": {
              "streetAddress": "123 A Street, A place",
              "postalCode": "SE2 0QG",
              "addressLocality": "Belvedere",
              "addressRegion": "London (region)"
            },
            "organizer": null
          }
        }
      ]
    }
  }
}

Events (filter)

Events can be filtered by date range, neighbourhood or tag. All events are returned in ascending order of start date.

let queryString = `
  query EventsByFilter(
    $fromDate: String, 
    $toDate: String, 
    $neighbourhoodId: Int, 
    $tagId: Int) 
  {

    eventsByFilter(
      fromDate: $fromDate, 
      toDate: $toDate, 
      neighbourhoodId: $neighbourhoodId, 
      tagId: $tagId) 
    { 
      id
      name
      summary
      description
      startDate
      endDate
      address {
        streetAddress
        postalCode
        addressLocality
        addressRegion
      }
      organizer {
        id
        name
      }
    }
  }`;

/* 
notes on event filter
The filter has the following parameters:
  fromDate: the initial start point. defaults to 
	  date request was made. can be in the past.
    format is YYYY-MM-DD HH:MM
  toDate: the end limit of query. must be after fromDate
  neighbourhoodId: scope events to be in a 
    neighbourhood. returns events in BOTH
    the address and service area.
  tagId: scope events to only one tag
*/

query(queryString)
  .then( (response) => {
    console.log(JSON.stringify(response, null, 2));
  });

/* response */
{
  "data": {
    "eventsByFilter": []
  }
}

Some sample GQL queries that show the various input fields. The fields can be combined in one query


# default query with no args
query {
	eventsByFilter {
	   id
	   name
	   startDate
	}

# query with fromDate
query {
	eventsByFilter(fromDate: "1985-01-01 00:00") {
	   id
	   name
	   startDate
	}

# query with fromDate and toDate
query {
	eventsByFilter(fromDate: "1990-01-01 00:00", toDate: "1990-03-01 00:00") {
	  id
	  name
	  startDate
	}

# query with neighbourhoodId
query {
  eventsByFilter(neighbourhoodId: 123) {
    id
    name
  }
}

# query with tagId
query {
  eventsByFilter(tagId: #{have_tag.id}) {
    id
    name
  }
}

Partners (show)

let queryString = `
query Partner($id: ID!) { 
  partner(id: $id) {
    id
    name
    summary
    description
    accessibilitySummary
    logo
    url
    facebookUrl
    twitterUrl
    address {
      streetAddress
      postalCode
      addressLocality
      addressRegion
      neighbourhood {
        name
        abbreviatedName
        unit
        unitName
        unitCodeKey
        unitCodeValue
      }
    }
    contact {
      name
      email
      telephone
    }
    openingHours {
      dayOfWeek
      opens
      closes
    }
    areasServed {
      name
      abbreviatedName
      unit
      unitName
      unitCodeKey
      unitCodeValue
    }
  }
}`;

query(queryString, { id: 10 })
  .then( (response) => {
    console.log(JSON.stringify(response, null, 2));
  });

/* typical response */
{
  "data": {
    "partner": {
      "id": "10",
      "name": "London Partner",
      "summary": "A Partner in London",
      "description": "Longer description of London Partner is here",
      "accessibilitySummary": "",
      "logo": "",
      "url": "",
      "facebookUrl": "",
      "twitterUrl": "https://twitter.com/",
      "address": null,
      "contact": {
        "name": "Me",
        "email": "me@example.com",
        "telephone": ""
      },
      "openingHours": [],
      "areasServed": [
        {
          "name": "London",
          "abbreviatedName": null,
          "unit": "region",
          "unitName": "London",
          "unitCodeKey": "RGN19CD",
          "unitCodeValue": "E12000007"
        }
      ]
    }
  }
}

Partners (index)

Show a sample request returning all events for a given date range with a given partner and tag?

let queryString = `
  query PartnerConnection($first: Int, $after: String) { 
    partnerConnection(first: $first, after: $after) {
      pageInfo {
        hasNextPage
        endCursor
      }
      edges {
        cursor
        node {
          id
          name
          summary
          description
          accessibilitySummary
          logo
          url
          facebookUrl
          twitterUrl
          address {
            streetAddress
            postalCode
            addressLocality
            addressRegion
            neighbourhood {
              name
              abbreviatedName
              unit
              unitName
              unitCodeKey
              unitCodeValue
            }
          }
          contact {
            name
            email
            telephone
          }
          openingHours {
            dayOfWeek
            opens
            closes
          }
          areasServed {
            name
            abbreviatedName
            unit
            unitName
            unitCodeKey
            unitCodeValue
          }
        }
      }
    }
  }`;

/* 
The partnerConnection pagination works the same as event pagination above
*/

/* return the first block of partners */
query(queryString, {first: 3})
  .then( (response) => {
    console.log(JSON.stringify(response, null, 2));
  })

/* response */
{
  "data": {
    "partnerConnection": {
      "pageInfo": {
        "hasNextPage": true,
        "endCursor": "Mw"
      },
      "edges": [
        {
          "cursor": "MQ",
          "node": {
            "id": "12",
            "name": "Service Area Partner",
            "summary": "",
            "description": "",
            "accessibilitySummary": "",
            "logo": "",
            "url": "",
            "facebookUrl": "",
            "twitterUrl": "https://twitter.com/",
            "address": null,
            "contact": {
              "name": "Me",
              "email": "me@example.com",
              "telephone": ""
            },
            "openingHours": [],
            "areasServed": [
              {
                "name": "London",
                "abbreviatedName": null,
                "unit": "region",
                "unitName": "London",
                "unitCodeKey": "RGN19CD",
                "unitCodeValue": "E12000007"
              }
            ]
          }
        },
        {
          "cursor": "Mg",
          "node": {
            "id": "10",
            "name": "London Partner",
            "summary": "A Partner in London",
            "description": "Longer description of London Partner is here",
            "accessibilitySummary": "",
            "logo": "",
            "url": "",
            "facebookUrl": "",
            "twitterUrl": "https://twitter.com/",
            "address": null,
            "contact": {
              "name": "Me",
              "email": "me@example.com",
              "telephone": ""
            },
            "openingHours": [],
            "areasServed": [
              {
                "name": "London",
                "abbreviatedName": null,
                "unit": "region",
                "unitName": "London",
                "unitCodeKey": "RGN19CD",
                "unitCodeValue": "E12000007"
              }
            ]
          }
        },
        {
          "cursor": "Mw",
          "node": {
            "id": "13",
            "name": "Inner London Partner",
            "summary": "Summary of outer london partner",
            "description": "",
            "accessibilitySummary": "",
            "logo": "",
            "url": "",
            "facebookUrl": "",
            "twitterUrl": "https://twitter.com/",
            "address": null,
            "contact": {
              "name": "",
              "email": "",
              "telephone": ""
            },
            "openingHours": [
              {
                "dayOfWeek": "Monday",
                "opens": "09:00:00",
                "closes": "17:00:00"
              },
              {
                "dayOfWeek": "Tuesday",
                "opens": "09:00:00",
                "closes": "17:00:00"
              },
              {
                "dayOfWeek": "Friday",
                "opens": "09:00:00",
                "closes": "17:00:00"
              }
            ],
            "areasServed": [
              {
                "name": "Inner London",
                "abbreviatedName": null,
                "unit": "county",
                "unitName": "Inner London",
                "unitCodeKey": "CTY19CD",
                "unitCodeValue": "E13000001"
              }
            ]
          }
        }
      ]
    }
  }
}

Articles (index)

The article index follows the same connection pattern as used by events and partners.

let queryString = `
  query ArticleConnection($first: Int, $after: String) { 
    articleConnection(first: $first, after: $after) {
      pageInfo {
        hasNextPage
        endCursor
      }
      edges {
        cursor
        node {
          headline
					text
          datePublished
          providers {
            name
          }
        }
      }
    }
}`;

/* 
The articleConnection pagination works the same as event pagination above
*/

/* return the first block of partners */
query(queryString, {first: 3})
  .then( (response) => {
    console.log(JSON.stringify(response, null, 2));
  })

{
  "data": {
    "articleConnection": {
      "edges": [
        {
          "node": {
            "headline": "Article 1",
            "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur nunc nunc, posuere eu congue sed, volutpat quis odio. Curabitur quis mollis arcu. Vestibulum porta orci ligula, in lacinia nulla malesuada sed. Duis volutpat tincidunt nulla, sed tincidunt massa accumsan id. Praesent finibus erat id nibh gravida, eu iaculis sem mollis. Nunc sed sapien cursus, hendrerit ipsum eu, elementum ligula. Praesent efficitur tellus quis nunc interdum, ac bibendum sapien malesuada. Suspendisse auctor porttitor venenatis. Vivamus hendrerit orci sit amet ante placerat, ut eleifend arcu euismod. Suspendisse scelerisque neque eget nulla bibendum molestie. Phasellus posuere egestas dictum. Morbi non arcu sit amet orci hendrerit blandit ut vitae lorem. Ut ac risus faucibus, vestibulum quam laoreet, convallis tortor. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam et consectetur leo. Praesent nec nulla arcu.\r\n\r\nPraesent id euismod turpis, quis gravida sem. Sed molestie ligula elit, a lacinia lectus efficitur non. Vestibulum accumsan, metus in faucibus pretium, nibh nulla mollis turpis, id maximus sapien magna quis velit. Nunc porttitor metus sit amet viverra consequat. Sed id ullamcorper lectus. Maecenas eget turpis eleifend, porttitor risus porttitor, dignissim lorem. In sed elementum augue. Praesent ligula dolor, faucibus nec iaculis et, pretium eget nulla. Morbi convallis libero non vehicula pulvinar."
          }
        },
        {
          "node": {
            "headline": "Article 2",
            "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur nunc nunc, posuere eu congue sed, volutpat quis odio. Curabitur quis mollis arcu. Vestibulum porta orci ligula, in lacinia nulla malesuada sed. Duis volutpat tincidunt nulla, sed tincidunt massa accumsan id. Praesent finibus erat id nibh gravida, eu iaculis sem mollis. Nunc sed sapien cursus, hendrerit ipsum eu, elementum ligula. Praesent efficitur tellus quis nunc interdum, ac bibendum sapien malesuada. Suspendisse auctor porttitor venenatis. Vivamus hendrerit orci sit amet ante placerat, ut eleifend arcu euismod. Suspendisse scelerisque neque eget nulla bibendum molestie. Phasellus posuere egestas dictum. Morbi non arcu sit amet orci hendrerit blandit ut vitae lorem. Ut ac risus faucibus, vestibulum quam laoreet, convallis tortor. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam et consectetur leo. Praesent nec nulla arcu.\r\n\r\nPraesent id euismod turpis, quis gravida sem. Sed molestie ligula elit, a lacinia lectus efficitur non. Vestibulum accumsan, metus in faucibus pretium, nibh nulla mollis turpis, id maximus sapien magna quis velit. Nunc porttitor metus sit amet viverra consequat. Sed id ullamcorper lectus. Maecenas eget turpis eleifend, porttitor risus porttitor, dignissim lorem. In sed elementum augue. Praesent ligula dolor, faucibus nec iaculis et, pretium eget nulla. Morbi convallis libero non vehicula pulvinar."
          }
        },
        {
          "node": {
            "headline": "Article 3",
            "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur nunc nunc, posuere eu congue sed, volutpat quis odio. Curabitur quis mollis arcu. Vestibulum porta orci ligula, in lacinia nulla malesuada sed. Duis volutpat tincidunt nulla, sed tincidunt massa accumsan id. Praesent finibus erat id nibh gravida, eu iaculis sem mollis. Nunc sed sapien cursus, hendrerit ipsum eu, elementum ligula. Praesent efficitur tellus quis nunc interdum, ac bibendum sapien malesuada. Suspendisse auctor porttitor venenatis. Vivamus hendrerit orci sit amet ante placerat, ut eleifend arcu euismod. Suspendisse scelerisque neque eget nulla bibendum molestie. Phasellus posuere egestas dictum. Morbi non arcu sit amet orci hendrerit blandit ut vitae lorem. Ut ac risus faucibus, vestibulum quam laoreet, convallis tortor. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam et consectetur leo. Praesent nec nulla arcu.\r\n\r\nPraesent id euismod turpis, quis gravida sem. Sed molestie ligula elit, a lacinia lectus efficitur non. Vestibulum accumsan, metus in faucibus pretium, nibh nulla mollis turpis, id maximus sapien magna quis velit. Nunc porttitor metus sit amet viverra consequat. Sed id ullamcorper lectus. Maecenas eget turpis eleifend, porttitor risus porttitor, dignissim lorem. In sed elementum augue. Praesent ligula dolor, faucibus nec iaculis et, pretium eget nulla. Morbi convallis libero non vehicula pulvinar."
          }
        }
      ]
    }
  }
}

Articles by tag and by partner tag

To find an article that has been tagged with a given tag the following endpoint is provided (Articles can return any field that is listed in the ArticleType found at the top of this page)

query {
  articlesByTag(tagID) {
    headline
    articleBody
    author
    datePublished
  }
}

Only articles that have been published will be returned. All articles are sorted by datePublished. The following response is typical

{
	"data": [
		{
	    "headline": "Article 1",
	    "articleBody": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur nunc nunc, posuere eu congue sed, volutpat quis odio. Curabitur quis mollis arcu. Vestibulum porta orci ligula, in lacinia nulla malesuada sed. Duis volutpat tincidunt nulla, sed tincidunt massa accumsan id. Praesent finibus erat id nibh gravida, eu iaculis sem mollis. Nunc sed sapien cursus, hendrerit ipsum eu, elementum ligula. Praesent efficitur tellus quis nunc interdum, ac bibendum sapien malesuada. Suspendisse auctor porttitor venenatis. Vivamus hendrerit orci sit amet ante placerat, ut eleifend arcu euismod. Suspendisse scelerisque neque eget nulla bibendum molestie. Phasellus posuere egestas dictum. Morbi non arcu sit amet orci hendrerit blandit ut vitae lorem. Ut ac risus faucibus, vestibulum quam laoreet, convallis tortor. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam et consectetur leo. Praesent nec nulla arcu.\r\n\r\nPraesent id euismod turpis, quis gravida sem. Sed molestie ligula elit, a lacinia lectus efficitur non. Vestibulum accumsan, metus in faucibus pretium, nibh nulla mollis turpis, id maximus sapien magna quis velit. Nunc porttitor metus sit amet viverra consequat. Sed id ullamcorper lectus. Maecenas eget turpis eleifend, porttitor risus porttitor, dignissim lorem. In sed elementum augue. Praesent ligula dolor, faucibus nec iaculis et, pretium eget nulla. Morbi convallis libero non vehicula pulvinar."
      "author": "A User",			
      "datePublished": "2022-02-10 00:00:00 +0000"
	  },
		{
	    "headline": "Article 2",
	    "articleBody": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur nunc nunc, posuere eu congue sed, volutpat quis odio. Curabitur quis mollis arcu. Vestibulum porta orci ligula, in lacinia nulla malesuada sed. Duis volutpat tincidunt nulla, sed tincidunt massa accumsan id. Praesent finibus erat id nibh gravida, eu iaculis sem mollis. Nunc sed sapien cursus, hendrerit ipsum eu, elementum ligula. Praesent efficitur tellus quis nunc interdum, ac bibendum sapien malesuada. Suspendisse auctor porttitor venenatis. Vivamus hendrerit orci sit amet ante placerat, ut eleifend arcu euismod. Suspendisse scelerisque neque eget nulla bibendum molestie. Phasellus posuere egestas dictum. Morbi non arcu sit amet orci hendrerit blandit ut vitae lorem. Ut ac risus faucibus, vestibulum quam laoreet, convallis tortor. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam et consectetur leo. Praesent nec nulla arcu.\r\n\r\nPraesent id euismod turpis, quis gravida sem. Sed molestie ligula elit, a lacinia lectus efficitur non. Vestibulum accumsan, metus in faucibus pretium, nibh nulla mollis turpis, id maximus sapien magna quis velit. Nunc porttitor metus sit amet viverra consequat. Sed id ullamcorper lectus. Maecenas eget turpis eleifend, porttitor risus porttitor, dignissim lorem. In sed elementum augue. Praesent ligula dolor, faucibus nec iaculis et, pretium eget nulla. Morbi convallis libero non vehicula pulvinar."
      "author": "A User",			
      "datePublished": "2022-02-08 00:00:00 +0000"
	  },
		{
	    "headline": "Article 3",
	    "articleBody": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur nunc nunc, posuere eu congue sed, volutpat quis odio. Curabitur quis mollis arcu. Vestibulum porta orci ligula, in lacinia nulla malesuada sed. Duis volutpat tincidunt nulla, sed tincidunt massa accumsan id. Praesent finibus erat id nibh gravida, eu iaculis sem mollis. Nunc sed sapien cursus, hendrerit ipsum eu, elementum ligula. Praesent efficitur tellus quis nunc interdum, ac bibendum sapien malesuada. Suspendisse auctor porttitor venenatis. Vivamus hendrerit orci sit amet ante placerat, ut eleifend arcu euismod. Suspendisse scelerisque neque eget nulla bibendum molestie. Phasellus posuere egestas dictum. Morbi non arcu sit amet orci hendrerit blandit ut vitae lorem. Ut ac risus faucibus, vestibulum quam laoreet, convallis tortor. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam et consectetur leo. Praesent nec nulla arcu.\r\n\r\nPraesent id euismod turpis, quis gravida sem. Sed molestie ligula elit, a lacinia lectus efficitur non. Vestibulum accumsan, metus in faucibus pretium, nibh nulla mollis turpis, id maximus sapien magna quis velit. Nunc porttitor metus sit amet viverra consequat. Sed id ullamcorper lectus. Maecenas eget turpis eleifend, porttitor risus porttitor, dignissim lorem. In sed elementum augue. Praesent ligula dolor, faucibus nec iaculis et, pretium eget nulla. Morbi convallis libero non vehicula pulvinar."
      "author": "A User",			
      "datePublished": "2022-02-02 00:00:00 +0000"
	  },
  ]
}

articlesByPartnerTag has the same symantics and response format as articlesByTag except it will return all articles that are associated with a partner that has the given tag.

Article (show)

(TBD)

Show a sample request returning all fields for a named article

Include nested fields like author partner etc