Concertify API (beta) API Reference

The Concertify API (beta) grants third-party developers and applications access to internal Concertify resources such as performances, works, venues, organizers, etc. through an easy-to-use RESTful API.

The current beta version grants access to a limited amount of resources. If you are a beta user and would like to request a specific feature, you can reach us at support@concertify.io.

API Endpoint
https://beta.api.concertify.io/v1
Terms of Service: https://beta.concertify.io/terms-and-conditions
Schemes: https
Version: 1.1.0

Authentication

api_key

All requests must be authenticated with the API key supplied to your organization or application. The key should be included in a x-api-key header.

Please contact us at support@concertify.io if you would like to request an API key.

type
apiKey
in
header
name
x-api-key

Performances

Any live performance of a Setlist comprised of Musical Works at a physical location is considered an individual Performance. Please note that at Concertify, the concept of a Performance is a single interpretation of a particular Setlist. Therefore, a music festival would be a group of Performances.

Fetching a known performance

GET /performances/{PerformanceId}

Get the full details of a single performance.

uuid: string (uuid)
in path

UUID of the performance to be fetched

200 OK

Successful operation

404 Not Found

Resource not found

Response Example (200 OK)
{
  "OriginMetaData": {
    "SubmissionDate": "string (date)",
    "SubmitterLastName": "string",
    "SubmitterId": "string",
    "SubmitterCMOCode": "string",
    "OriginName": "string",
    "SubmitterName": "string"
  },
  "Venue": {
    "IdAtOrigin": "string",
    "Name": "string",
    "Address": {
      "CountryCode": "string",
      "ZipCode": "string",
      "State": "string",
      "Line1": "string",
      "City": "string",
      "Line2": "string",
      "Phone": "string"
    }
  },
  "Setlist": {
    "Title": "string",
    "Works": [
      {
        "Title": "string",
        "WorkIdAtOrigin": "string",
        "ISWC": "string",
        "PerformanceDuration": "integer (int32)",
        "OriginName": "string",
        "OriginalDuration": "integer (int32)",
        "RightsOwners": [
          {
            "CAERole": "string",
            "IPINumber": "string",
            "PerformingRightsSocietyId": "string",
            "FirstName": "string",
            "LastName": "string"
          }
        ]
      }
    ],
    "SubmissionDateTime": "string",
    "SubmitterId": "string",
    "Status": "string",
    "LastModificationTimeStamp": "string"
  },
  "Organizer": {
    "IdAtOrigin": "string",
    "Name": "string",
    "Address": {
      "CountryCode": "string",
      "ZipCode": "string",
      "State": "string",
      "Line1": "string",
      "City": "string",
      "Line2": "string",
      "Phone": "string"
    }
  },
  "Date": "string (date)",
  "CMOCode": "string",
  "PerformingArtist": {
    "IdAtOrigin": "string",
    "Name": "string",
    "Contact": {
      "Website": "string",
      "Email": "string (email)",
      "SocialMedia": {
        "Facebook": "string",
        "Twitter": "string"
      }
    }
  },
  "EndTime": "string",
  "Status": "string",
  "StartTime": "string",
  "License": {
    "PaymentDate": "string (date)",
    "LicenseFee": "number",
    "EstimatedValue": "number",
    "DeductionsDesc": "string",
    "SocietyTariffValue": "number",
    "OtherDeductions": "number",
    "Currency": "string",
    "BoxOffice": "number",
    "SocietyAdminFeeValue": "number",
    "Collections": "number",
    "SocietyTariffPercentage": "number",
    "SocietyAdminFeePercentage": "number",
    "EstimatedValueDate": "string (date)",
    "NetDistributable": "number"
  }
}
Response Example (404 Not Found)
{
  "Message": "string",
  "Code": "string"
}

Updating existing performances

PUT /performances/{PerformanceId}

This operation updates an existing performance. Currently, partial updates are supported only on root attributes representing objects. This can be summarized in two important points:

  • Updating a root attribute that represents an object (such as PerformingArtist, Setlist, Venue, License, OriginMetaData, or Organizer) will completely replace the corresponding value and delete any sub-attributes not present in the updated body.
  • In order to update a deeply-nested attribute (such as Venue.Address.CountryCode), the update body should contain a Venue attribute containing all original values plus the updated value.

Updated attributes of the performance. For this operation, attributes marked as required in the schema may be omitted. A 400 Bad Request (validation error) is only returned for invalid value types.

Request Example
{
  "OriginMetaData": {
    "SubmissionDate": "string (date)",
    "SubmitterLastName": "string",
    "SubmitterId": "string",
    "SubmitterCMOCode": "string",
    "OriginName": "string",
    "SubmitterName": "string"
  },
  "Venue": {
    "IdAtOrigin": "string",
    "Name": "string",
    "Address": {
      "CountryCode": "string",
      "ZipCode": "string",
      "State": "string",
      "Line1": "string",
      "City": "string",
      "Line2": "string",
      "Phone": "string"
    }
  },
  "Setlist": {
    "Title": "string",
    "Works": [
      {
        "Title": "string",
        "WorkIdAtOrigin": "string",
        "ISWC": "string",
        "PerformanceDuration": "integer (int32)",
        "OriginName": "string",
        "OriginalDuration": "integer (int32)",
        "RightsOwners": [
          {
            "CAERole": "string",
            "IPINumber": "string",
            "PerformingRightsSocietyId": "string",
            "FirstName": "string",
            "LastName": "string"
          }
        ]
      }
    ],
    "SubmissionDateTime": "string",
    "SubmitterId": "string",
    "Status": "string",
    "LastModificationTimeStamp": "string"
  },
  "Organizer": {
    "IdAtOrigin": "string",
    "Name": "string",
    "Address": {
      "CountryCode": "string",
      "ZipCode": "string",
      "State": "string",
      "Line1": "string",
      "City": "string",
      "Line2": "string",
      "Phone": "string"
    }
  },
  "Date": "string (date)",
  "CMOCode": "string",
  "PerformingArtist": {
    "IdAtOrigin": "string",
    "Name": "string",
    "Contact": {
      "Website": "string",
      "Email": "string (email)",
      "SocialMedia": {
        "Facebook": "string",
        "Twitter": "string"
      }
    }
  },
  "EndTime": "string",
  "Status": "string",
  "StartTime": "string",
  "License": {
    "PaymentDate": "string (date)",
    "LicenseFee": "number",
    "EstimatedValue": "number",
    "DeductionsDesc": "string",
    "SocietyTariffValue": "number",
    "OtherDeductions": "number",
    "Currency": "string",
    "BoxOffice": "number",
    "SocietyAdminFeeValue": "number",
    "Collections": "number",
    "SocietyTariffPercentage": "number",
    "SocietyAdminFeePercentage": "number",
    "EstimatedValueDate": "string (date)",
    "NetDistributable": "number"
  }
}
200 OK

OK

400 Bad Request

Validation error

404 Not Found

Resource not found

Response Example (200 OK)
{
  "OriginMetaData": {
    "SubmissionDate": "string (date)",
    "SubmitterLastName": "string",
    "SubmitterId": "string",
    "SubmitterCMOCode": "string",
    "OriginName": "string",
    "SubmitterName": "string"
  },
  "Venue": {
    "IdAtOrigin": "string",
    "Name": "string",
    "Address": {
      "CountryCode": "string",
      "ZipCode": "string",
      "State": "string",
      "Line1": "string",
      "City": "string",
      "Line2": "string",
      "Phone": "string"
    }
  },
  "Setlist": {
    "Title": "string",
    "Works": [
      {
        "Title": "string",
        "WorkIdAtOrigin": "string",
        "ISWC": "string",
        "PerformanceDuration": "integer (int32)",
        "OriginName": "string",
        "OriginalDuration": "integer (int32)",
        "RightsOwners": [
          {
            "CAERole": "string",
            "IPINumber": "string",
            "PerformingRightsSocietyId": "string",
            "FirstName": "string",
            "LastName": "string"
          }
        ]
      }
    ],
    "SubmissionDateTime": "string",
    "SubmitterId": "string",
    "Status": "string",
    "LastModificationTimeStamp": "string"
  },
  "Organizer": {
    "IdAtOrigin": "string",
    "Name": "string",
    "Address": {
      "CountryCode": "string",
      "ZipCode": "string",
      "State": "string",
      "Line1": "string",
      "City": "string",
      "Line2": "string",
      "Phone": "string"
    }
  },
  "Date": "string (date)",
  "CMOCode": "string",
  "PerformingArtist": {
    "IdAtOrigin": "string",
    "Name": "string",
    "Contact": {
      "Website": "string",
      "Email": "string (email)",
      "SocialMedia": {
        "Facebook": "string",
        "Twitter": "string"
      }
    }
  },
  "EndTime": "string",
  "Status": "string",
  "StartTime": "string",
  "License": {
    "PaymentDate": "string (date)",
    "LicenseFee": "number",
    "EstimatedValue": "number",
    "DeductionsDesc": "string",
    "SocietyTariffValue": "number",
    "OtherDeductions": "number",
    "Currency": "string",
    "BoxOffice": "number",
    "SocietyAdminFeeValue": "number",
    "Collections": "number",
    "SocietyTariffPercentage": "number",
    "SocietyAdminFeePercentage": "number",
    "EstimatedValueDate": "string (date)",
    "NetDistributable": "number"
  }
}
Response Example (400 Bad Request)
{
  "Message": "string",
  "Code": "string"
}
Response Example (404 Not Found)
{
  "Message": "string",
  "Code": "string"
}

Deleting performances

DELETE /performances/{PerformanceId}

Remove a performance from Concertify. This is a soft delete operation, meaning that the performance is not permanently removed. However, the deleted performance will not appear any search results and trying to GET the deleted performance will result in a ResourceNotFoundError

A reason as to why the Performance is being deleted must be provided in the request body.

Reason for deleting the Performance

Request Example
{
  "ReasonForDeletion": "string"
}
200 OK

OK

type
object
400 Bad Request

Validation error

404 Not Found

Resource not found

Response Example (200 OK)
{
  "Deleted": true,
  "ReasonForDeletion": "Cancelled",
  "LastModificationDateTime": "2019-08-30T12:48:37.294113"
}
Response Example (400 Bad Request)
{
  "Message": "string",
  "Code": "string"
}
Response Example (404 Not Found)
{
  "Message": "string",
  "Code": "string"
}

Adding performances

POST /performances

This operation adds one or more Performances to Concertify. Currently, there is no check for duplicates, meaning that the caller is responsible for making sure that no duplicate entries are being entered.

This is an atomic operation. If the request contains more than one Performance and there is any validation error, none of the Performance will be created. The maximum amount of allowed Performances per request is 20.

Performance to add

Request Example
{
  "OriginMetaData": {
    "SubmissionDate": "string (date)",
    "SubmitterLastName": "string",
    "SubmitterId": "string",
    "SubmitterCMOCode": "string",
    "OriginName": "string",
    "SubmitterName": "string"
  },
  "Venue": {
    "IdAtOrigin": "string",
    "Name": "string",
    "Address": {
      "CountryCode": "string",
      "ZipCode": "string",
      "State": "string",
      "Line1": "string",
      "City": "string",
      "Line2": "string",
      "Phone": "string"
    }
  },
  "Setlist": {
    "Title": "string",
    "Works": [
      {
        "Title": "string",
        "WorkIdAtOrigin": "string",
        "ISWC": "string",
        "PerformanceDuration": "integer (int32)",
        "OriginName": "string",
        "OriginalDuration": "integer (int32)",
        "RightsOwners": [
          {
            "CAERole": "string",
            "IPINumber": "string",
            "PerformingRightsSocietyId": "string",
            "FirstName": "string",
            "LastName": "string"
          }
        ]
      }
    ],
    "SubmissionDateTime": "string",
    "SubmitterId": "string",
    "Status": "string",
    "LastModificationTimeStamp": "string"
  },
  "Organizer": {
    "IdAtOrigin": "string",
    "Name": "string",
    "Address": {
      "CountryCode": "string",
      "ZipCode": "string",
      "State": "string",
      "Line1": "string",
      "City": "string",
      "Line2": "string",
      "Phone": "string"
    }
  },
  "Date": "string (date)",
  "CMOCode": "string",
  "PerformingArtist": {
    "IdAtOrigin": "string",
    "Name": "string",
    "Contact": {
      "Website": "string",
      "Email": "string (email)",
      "SocialMedia": {
        "Facebook": "string",
        "Twitter": "string"
      }
    }
  },
  "EndTime": "string",
  "Status": "string",
  "StartTime": "string",
  "License": {
    "PaymentDate": "string (date)",
    "LicenseFee": "number",
    "EstimatedValue": "number",
    "DeductionsDesc": "string",
    "SocietyTariffValue": "number",
    "OtherDeductions": "number",
    "Currency": "string",
    "BoxOffice": "number",
    "SocietyAdminFeeValue": "number",
    "Collections": "number",
    "SocietyTariffPercentage": "number",
    "SocietyAdminFeePercentage": "number",
    "EstimatedValueDate": "string (date)",
    "NetDistributable": "number"
  }
}
200 OK

OK

type
object
400 Bad Request

Validation error

Response Example (200 OK)
{
  "Summary": [
    {
      "PerformanceId": "string",
      "Date": "string (date)",
      "VenueName": "string",
      "City": "string",
      "CountryCode": "string"
    }
  ]
}
Response Example (400 Bad Request)
{
  "Message": "string",
  "Code": "string"
}

Musical Works

Song, composition, arrangement, translation, or any other form of musical work

Searching musical works

GET /works?q=enter%20sandman

Search for musical works available in Concertify. This performs a BEGINS_WITH operation under the hood, meaning that a query for the title "enter" will return all musical works beginning with the word "enter".

q: string
in query

Title of the musical work to query (e.g. 'Fade To Black', 'Bad Medicine'). The title must be URL-encoded (e.g. Fade To Black -> fade%20to%20black)

200 OK

Search results

type
object
Response Example (200 OK)
{
  "Works": [
    {
      "Title": "string",
      "WorkIdAtOrigin": "string",
      "ISWC": "string",
      "PerformanceDuration": "integer (int32)",
      "OriginName": "string",
      "OriginalDuration": "integer (int32)",
      "RightsOwners": [
        {
          "CAERole": "string",
          "IPINumber": "string",
          "PerformingRightsSocietyId": "string",
          "FirstName": "string",
          "LastName": "string"
        }
      ]
    }
  ]
}

Schema Definitions

OriginMetaData: object

SubmissionDate: string | null (date)
SubmitterLastName: string | null
SubmitterId: string | null
SubmitterCMOCode: string | null
OriginName: string | null
SubmitterName: string | null
Example
{
  "SubmissionDate": "string (date)",
  "SubmitterLastName": "string",
  "SubmitterId": "string",
  "SubmitterCMOCode": "string",
  "OriginName": "string",
  "SubmitterName": "string"
}

Address: object

CountryCode: string
ZipCode: string | null
State: string | null
Line1: string | null
City: string
Line2: string | null
Phone: string | null
Example
{
  "CountryCode": "string",
  "ZipCode": "string",
  "State": "string",
  "Line1": "string",
  "City": "string",
  "Line2": "string",
  "Phone": "string"
}

Venue: object

IdAtOrigin: string | null
Name: string
Address: Address
Example
{
  "IdAtOrigin": "string",
  "Name": "string",
  "Address": {
    "CountryCode": "string",
    "ZipCode": "string",
    "State": "string",
    "Line1": "string",
    "City": "string",
    "Line2": "string",
    "Phone": "string"
  }
}

RightsOwner: object

CAERole: string
IPINumber: string
PerformingRightsSocietyId: string
FirstName: string
LastName: string
Example
{
  "CAERole": "string",
  "IPINumber": "string",
  "PerformingRightsSocietyId": "string",
  "FirstName": "string",
  "LastName": "string"
}

Work: object

Title: string
WorkIdAtOrigin: string | null
ISWC: string | null
PerformanceDuration: integer | null (int32)
OriginName: string | null
OriginalDuration: integer | null (int32)
RightsOwners: RightsOwner | null
RightsOwner
Example
{
  "Title": "string",
  "WorkIdAtOrigin": "string",
  "ISWC": "string",
  "PerformanceDuration": "integer (int32)",
  "OriginName": "string",
  "OriginalDuration": "integer (int32)",
  "RightsOwners": [
    {
      "CAERole": "string",
      "IPINumber": "string",
      "PerformingRightsSocietyId": "string",
      "FirstName": "string",
      "LastName": "string"
    }
  ]
}

Setlist: object

Title: string | null
Works: Work
Work
SubmissionDateTime: string | null
SubmitterId: string | null
Status: string | null draft, confirmed
LastModificationTimeStamp: string | null
Example
{
  "Title": "string",
  "Works": [
    {
      "Title": "string",
      "WorkIdAtOrigin": "string",
      "ISWC": "string",
      "PerformanceDuration": "integer (int32)",
      "OriginName": "string",
      "OriginalDuration": "integer (int32)",
      "RightsOwners": [
        {
          "CAERole": "string",
          "IPINumber": "string",
          "PerformingRightsSocietyId": "string",
          "FirstName": "string",
          "LastName": "string"
        }
      ]
    }
  ],
  "SubmissionDateTime": "string",
  "SubmitterId": "string",
  "Status": "string",
  "LastModificationTimeStamp": "string"
}

Organizer: object

IdAtOrigin: string | null
Name: string
Address: Address
Example
{
  "IdAtOrigin": "string",
  "Name": "string",
  "Address": {
    "CountryCode": "string",
    "ZipCode": "string",
    "State": "string",
    "Line1": "string",
    "City": "string",
    "Line2": "string",
    "Phone": "string"
  }
}

SocialMedia: object

Facebook: string | null
Twitter: string | null
Example
{
  "Facebook": "string",
  "Twitter": "string"
}

Contact: object

Website: string | null
Email: string | null (email)
SocialMedia: | null
Example
{
  "Website": "string",
  "Email": "string (email)",
  "SocialMedia": {
    "Facebook": "string",
    "Twitter": "string"
  }
}

PerformingArtist: object

IdAtOrigin: string | null
Name: string
Contact: | null
Example
{
  "IdAtOrigin": "string",
  "Name": "string",
  "Contact": {
    "Website": "string",
    "Email": "string (email)",
    "SocialMedia": {
      "Facebook": "string",
      "Twitter": "string"
    }
  }
}

License: object

PaymentDate: string | null (date)
LicenseFee: number | null x ≥ 0
EstimatedValue: number x ≥ 0
DeductionsDesc: string | null
SocietyTariffValue: number | null x ≥ 0
OtherDeductions: number | null x ≥ 0
Currency: string
BoxOffice: number | null x ≥ 0
SocietyAdminFeeValue: number | null x ≥ 0
Collections: number | null x ≥ 0
SocietyTariffPercentage: number | null 0 ≤ x ≤ 100
SocietyAdminFeePercentage: number | null 0 ≤ x ≤ 100
EstimatedValueDate: string (date)
NetDistributable: number | null x ≥ 0
Example
{
  "PaymentDate": "string (date)",
  "LicenseFee": "number",
  "EstimatedValue": "number",
  "DeductionsDesc": "string",
  "SocietyTariffValue": "number",
  "OtherDeductions": "number",
  "Currency": "string",
  "BoxOffice": "number",
  "SocietyAdminFeeValue": "number",
  "Collections": "number",
  "SocietyTariffPercentage": "number",
  "SocietyAdminFeePercentage": "number",
  "EstimatedValueDate": "string (date)",
  "NetDistributable": "number"
}

Performance: object

OriginMetaData: | null
Venue: Venue
Setlist: | null
Organizer: | null
Date: string (date)
CMOCode: string
PerformingArtist: PerformingArtist
EndTime: string | null
Status: string | null new, scheduled, invoiced, collected, distributed
StartTime: string | null
License: | null
Example
{
  "OriginMetaData": {
    "SubmissionDate": "string (date)",
    "SubmitterLastName": "string",
    "SubmitterId": "string",
    "SubmitterCMOCode": "string",
    "OriginName": "string",
    "SubmitterName": "string"
  },
  "Venue": {
    "IdAtOrigin": "string",
    "Name": "string",
    "Address": {
      "CountryCode": "string",
      "ZipCode": "string",
      "State": "string",
      "Line1": "string",
      "City": "string",
      "Line2": "string",
      "Phone": "string"
    }
  },
  "Setlist": {
    "Title": "string",
    "Works": [
      {
        "Title": "string",
        "WorkIdAtOrigin": "string",
        "ISWC": "string",
        "PerformanceDuration": "integer (int32)",
        "OriginName": "string",
        "OriginalDuration": "integer (int32)",
        "RightsOwners": [
          {
            "CAERole": "string",
            "IPINumber": "string",
            "PerformingRightsSocietyId": "string",
            "FirstName": "string",
            "LastName": "string"
          }
        ]
      }
    ],
    "SubmissionDateTime": "string",
    "SubmitterId": "string",
    "Status": "string",
    "LastModificationTimeStamp": "string"
  },
  "Organizer": {
    "IdAtOrigin": "string",
    "Name": "string",
    "Address": {
      "CountryCode": "string",
      "ZipCode": "string",
      "State": "string",
      "Line1": "string",
      "City": "string",
      "Line2": "string",
      "Phone": "string"
    }
  },
  "Date": "string (date)",
  "CMOCode": "string",
  "PerformingArtist": {
    "IdAtOrigin": "string",
    "Name": "string",
    "Contact": {
      "Website": "string",
      "Email": "string (email)",
      "SocialMedia": {
        "Facebook": "string",
        "Twitter": "string"
      }
    }
  },
  "EndTime": "string",
  "Status": "string",
  "StartTime": "string",
  "License": {
    "PaymentDate": "string (date)",
    "LicenseFee": "number",
    "EstimatedValue": "number",
    "DeductionsDesc": "string",
    "SocietyTariffValue": "number",
    "OtherDeductions": "number",
    "Currency": "string",
    "BoxOffice": "number",
    "SocietyAdminFeeValue": "number",
    "Collections": "number",
    "SocietyTariffPercentage": "number",
    "SocietyAdminFeePercentage": "number",
    "EstimatedValueDate": "string (date)",
    "NetDistributable": "number"
  }
}

DeletePerformanceRequest: object

ReasonForDeletion: string Cancelled, WrongSubmission
Example
{
  "ReasonForDeletion": "string"
}

ResourceNotFoundError: object

Message: string
Code: string
Example
{
  "Message": "string",
  "Code": "string"
}

BadRequestError: object

Message: string
Code: string
Example
{
  "Message": "string",
  "Code": "string"
}